從C#到Objective-C,循序漸進學習蘋果開發(5)--利用XCode來進行IOS的程序開發

本隨筆系列主要介紹從一個Windows平臺從事C#開發到Mac平臺蘋果開發的一系列感想和體驗歷程,本系列文章是在起步階段逐步積累的,希望帶給大家更好,更真實的轉換歷程體驗。前面幾篇隨筆主要介紹C#和Objective-C之間的差異,本片開始介紹利用XCode來進行IOS的程序開發,對比和C#利用VS進行開發的差異,以便我們更快的融入到IOS開發的陣營。
在介紹利用XCode來開發項目前,我自己消化了幾本IOS開發的書籍,以及蘋果開發網站的一些自認為重要文章介紹,學習了一些視頻的內容,包括網易里面的斯坦福大學的一些視頻,并自己模擬了一些簡單的項目代碼開發,雖然不能說是已經掌握了相關的IOS開發(其實還差很遠),但是也對一些基礎的項目應用有了一個大概的了解,結合以前的Winfrom應用開發(很類似),也算有了一些小小的領悟吧。但介紹IOS開發,也是結合自己以前對C#開發的一些經驗和理解來介紹,希望不詳細,不確切的地方,大家多多指正。

1、根據項目模板創建項目

其實對開發而言,無論是對于使用C#開發的VS開發工具,還是基于Objective-C開發的XCode工具,都有基于模板生成對應的項目,這樣我們可以快速生成我們需要的項目框架,這里為了介紹方便,建立一個單視圖的應用程序,有點類似于我們創建一個Winform的標準應用程序,里面默認也是帶有一個Form窗體的,這個XCode的項目模板也是類似。



創建一個項目,我們需要指定項目的名稱、類前綴和一些相關的信息,這個和我們創建C#項目指定命名空間以及一些相關參數也有點類似,但不等同,C#里面,對于多個項目應用,我們可以通過命名空間進行區分,但是在IOS里面開發,我們就只能通過類名進行限定了,因此,必要的類名前綴是需要的,這個的類前綴,主要是用來創建項目的視圖控制器或者代理類的前綴標識。



創建的項目后的視圖如下所示,可以看出紅色方框就是前面一個地方的設置。

2、IOS項目和Winform項目開發的差別

創建的項目,默認有一個視圖控制器和一個視圖代理類,還有一個空白的界面,如下所示。這個和我們在VS里面開發Winform項目很類似,也是需要拖動控件進行界面設計的。



IOS里面也提供了很多相關的控件,作為界面設計的需要,當然除了拖動方式,在Objective C里面也可以通過代碼方式創建相關的控件對象,這個和C#創建控件一樣,沒什么差別。
但是,當我們把控件拖動放到設計面板里面后,發現雙擊不再是處理響應控件操作的代碼了,而是修改控件的標題,這個開發觀念和C#里面開發Winform應用不同,這個是因為IOS的開發是嚴格遵循MVC的設計模式,它的界面設計獨立的,界面視圖的控制器又有獨立的類進行處理,另外,它的一些處理,還可以放到一些代理類里面進行處理(如上圖截圖里面的應用程序委托類),這個其實有點類似于WPF的方式了,界面可以通過其他工具進行設計開發。
一般來說,我們在XCode中創建一個視圖的時候,同時也會創建一個空白的XIB后綴名的視圖界面,視圖控制器就是管理模型數據(和模型邏輯調用),然后以一定的方式呈現視圖內容,也就是說,控制器對模型和視圖都有全權的控制處理;而視圖如果要通知控制器,一般在IOS里面采用代理的方式或者Target-Action方式進行通信,它的關系可以通過斯坦福教授那個IOS開發介紹的圖形進行闡釋,如下所示。



我們如果是從事過C#的Winform開發的,或者WebForm的話,那么可能很不習慣,在IOS里面,界面設計和處理代碼是分開的,它利用XML來描述界面(XIB文件),另外,對于界面的后臺處理,通過視圖控制器進行,而每個視圖里面,可能還會放置一些子視圖,如WebView,TableView等這樣的視圖,如果需要這些具體的視圖操作,那么還需要在視圖控制器里面使用視圖代理接口,如子視圖的繪制和數據源的接口,選擇視圖某部分等操作,都是通過代理接口進行處理,而對于一些按鈕的操作,則是通過Target-Action這樣的模式進行響應。反觀C#里面的Winform開發,可能不會劃分那么復雜,多數是通過事件等方式對數據進行綁定或者按鈕事件的響應,要了解IOS的開發模式,可能這里需要特別注意調整的地方。
隨著認識的深入,你會慢慢了解這個模式對于界面的設計,代碼的維護分別的很清楚,維護很方便。

3、添加一些界面控件和處理

首先,我們和在VS里面開發WInform項目一樣,需要先繪制好界面,我們先把界面設計好向如下圖形所示,這個工作沒有什么特別之處,就是把它拖動到面板上,調整位置和布局即可。
為了好看,我在XCode的項目里面導入了一個圖片,然后指定了按鈕的背景圖片,如下所示。



運行界面,看到的效果和這個差不多,不過如果要在代碼里面對界面元素(如文本輸入、標簽、按鈕等)進行處理,目前還不可以,需要增加一個IBOutLet的對象到代碼里面,一般可以通過拖動的方式添加。
拖動的方式,就是按著Control拖動界面元素到代碼里面,會彈出一個輸入界面,輸入控件的名稱即可,這個變量稱之為插座(IBOutlet)變量,如下所示。


對于按鈕的事件處理,也可以通過這個方式進行添加,如下所示,


最后視圖實現類的代碼如下所示

#import "MyHelloAppViewController.h"

@interface MyHelloAppViewController ()

@property (weak, nonatomic) IBOutlet UITextField *txtName;

@property (weak, nonatomic) IBOutlet UITextField *txtAge;

- (IBAction)getResult:(id)sender;

@end

然后我們在后臺代碼里面,實現getResult的方法內容,把輸入的內容在彈出視圖里面進行展示,如下所示。

- (IBAction)getResult:(id)sender
{
    NSLog(@"姓名:%@  年齡:%@",self.txtName.text, self.txtAge.text);
    
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:self.txtName.text
                                                      message:self.txtAge.text
                                                     delegate:self cancelButtonTitle:@"取消"
                                            otherButtonTitles:@"保存", nil];
    message.alertViewStyle = UIAlertViewStyleDefault;
    [message show];
}

運行界面后,得到的效果如下所示。


4、界面的橫向布局

我們知道,一般的IOS應用,可以豎著使用,也可以橫著使用,如果界面支持,那么橫著的話,也應該看起來很美觀才可以,例如IOS里面的瀏覽器就是很好的例子,橫豎總適宜的。
我們上面方式創建的界面,雖然界面元素比較少,但是一旦橫著來看,那么它的效果就是固定寬度的了。



如果需要讓它們的元素能夠根據界面自動調整,就需要設置控件的約束,如下所示。



一旦添加了約束,我們選擇輸入框后,就會看到幾個方向上的一些線條提示,如下所示。

通過指定幾個不同方向的約束,就能夠很好的控制輸入框的大小了,讓它可以根據界面的調整而自動進行調整,運行模擬器,得到的界面效果如下所示,輸入框的寬度已經能夠自動伸縮了。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容