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

本隨筆系列主要介紹從一個Windows平臺從事C#開發到Mac平臺蘋果開發的一系列感想和體驗歷程,本系列文章是在起步階段逐步積累的,但願帶給你們更好,更真實的轉換歷程體驗。前面幾篇隨筆主要介紹C#和Objective-C之間的差別,本片開始介紹利用XCode來進行IOS的程序開發,對比和C#利用VS進行開發的差別,以便咱們更快的融入到IOS開發的陣營。設計模式

在介紹利用XCode來開發項目前,我本身消化了幾本IOS開發的書籍,以及蘋果開發網站的一些自認爲重要文章介紹,學習了一些視頻的內容,包括網易裏面的斯坦福大學的一些視頻,並本身模擬了一些簡單的項目代碼開發,雖然不能說是已經掌握了相關的IOS開發(其實還差很遠),可是也對一些基礎的項目應用有了一個大概的瞭解,結合之前的Winfrom應用開發(很相似),也算有了一些小小的領悟吧。但介紹IOS開發,也是結合本身之前對C#開發的一些經驗和理解來介紹,但願不詳細,不確切的地方,你們多多指正。瀏覽器

一、根據項目模板建立項目

其實對開發而言,不管是對於使用C#開發的VS開發工具,仍是基於Objective-C開發的XCode工具,都有基於模板生成對應的項目,這樣咱們能夠快速生成咱們須要的項目框架,這裏爲了介紹方便,創建一個單視圖的應用程序,有點相似於咱們建立一個Winform的標準應用程序,裏面默認也是帶有一個Form窗體的,這個XCode的項目模板也是相似。框架

 

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

建立的項目後的視圖以下所示,能夠看出紅色方框就是前面一個地方的設置。佈局

 

二、IOS項目和Winform項目開發的差異

建立的項目,默認有一個視圖控制器和一個視圖代理類,還有一個空白的界面,以下所示。這個和咱們在VS裏面開發Winform項目很相似,也是須要拖動控件進行界面設計的。學習

IOS裏面也提供了不少相關的控件,做爲界面設計的須要,固然除了拖動方式,在Objective C裏面也能夠經過代碼方式建立相關的控件對象,這個和C#建立控件同樣,沒什麼差異。開發工具

可是,當咱們把控件拖動放到設計面板裏面後,發現雙擊再也不是處理響應控件操做的代碼了,而是修改控件的標題,這個開發觀念和C#裏面開發Winform應用不一樣,這個是由於IOS的開發是嚴格遵循MVC的設計模式,它的界面設計獨立的,界面視圖的控制器又有獨立的類進行處理,另外,它的一些處理,還能夠放到一些代理類裏面進行處理(如上圖截圖裏面的應用程序委託類),這個其實有點相似於WPF的方式了,界面能夠經過其餘工具進行設計開發。網站

通常來講,咱們在XCode中建立一個視圖的時候,同時也會建立一個空白的XIB後綴名的視圖界面,視圖控制器就是管理模型數據(和模型邏輯調用),而後以必定的方式呈現視圖內容,也就是說,控制器對模型和視圖都有全權的控制處理;而視圖若是要通知控制器,通常在IOS裏面採用代理的方式或者Target-Action方式進行通訊,它的關係能夠經過斯坦福教授那個IOS開發介紹的圖形進行闡釋,以下所示。atom

咱們若是是從事過C#的Winform開發的,或者WebForm的話,那麼可能很不習慣,在IOS裏面,界面設計和處理代碼是分開的,它利用XML來描述界面(XIB文件),另外,對於界面的後臺處理,經過視圖控制器進行,而每一個視圖裏面,可能還會放置一些子視圖,如WebView,TableView等這樣的視圖,若是須要這些具體的視圖操做,那麼還須要在視圖控制器裏面使用視圖代理接口,如子視圖的繪製和數據源的接口,選擇視圖某部分等操做,都是經過代理接口進行處理,而對於一些按鈕的操做,則是經過Target-Action這樣的模式進行響應。反觀C#裏面的Winform開發,可能不會劃分那麼複雜,多數是經過事件等方式對數據進行綁定或者按鈕事件的響應,要了解IOS的開發模式,可能這裏須要特別注意調整的地方。spa

隨着認識的深刻,你會慢慢了解這個模式對於界面的設計,代碼的維護分別的很清楚,維護很方便。

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

首先,咱們和在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];
}

運行界面後,獲得的效果以下所示。

四、界面的橫向佈局

咱們知道,通常的IOS應用,能夠豎着使用,也能夠橫着使用,若是界面支持,那麼橫着的話,也應該看起來很美觀才能夠,例如IOS裏面的瀏覽器就是很好的例子,橫豎總適宜的。

咱們上面方式建立的界面,雖然界面元素比較少,可是一旦橫着來看,那麼它的效果就是固定寬度的了。

若是須要讓它們的元素可以根據界面自動調整,就須要設置控件的約束,以下所示。

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

經過指定幾個不一樣方向的約束,就可以很好的控制輸入框的大小了,讓它能夠根據界面的調整而自動進行調整,運行模擬器,獲得的界面效果以下所示,輸入框的寬度已經可以自動伸縮了。

相關文章
相關標籤/搜索