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

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

1蜀漆、根據(jù)項目模板創(chuàng)建項目

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



創(chuàng)建一個項目狐粱,我們需要指定項目的名稱舀寓、類前綴和一些相關的信息,這個和我們創(chuàng)建C#項目指定命名空間以及一些相關參數(shù)也有點類似肌蜻,但不等同互墓,C#里面,對于多個項目應用宋欺,我們可以通過命名空間進行區(qū)分轰豆,但是在IOS里面開發(fā)胰伍,我們就只能通過類名進行限定了,因此酸休,必要的類名前綴是需要的骂租,這個的類前綴,主要是用來創(chuàng)建項目的視圖控制器或者代理類的前綴標識斑司。



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

2宿刮、IOS項目和Winform項目開發(fā)的差別

創(chuàng)建的項目互站,默認有一個視圖控制器和一個視圖代理類,還有一個空白的界面僵缺,如下所示胡桃。這個和我們在VS里面開發(fā)Winform項目很類似,也是需要拖動控件進行界面設計的磕潮。



IOS里面也提供了很多相關的控件翠胰,作為界面設計的需要,當然除了拖動方式自脯,在Objective C里面也可以通過代碼方式創(chuàng)建相關的控件對象之景,這個和C#創(chuàng)建控件一樣,沒什么差別膏潮。
但是锻狗,當我們把控件拖動放到設計面板里面后,發(fā)現(xiàn)雙擊不再是處理響應控件操作的代碼了焕参,而是修改控件的標題轻纪,這個開發(fā)觀念和C#里面開發(fā)Winform應用不同,這個是因為IOS的開發(fā)是嚴格遵循MVC的設計模式叠纷,它的界面設計獨立的桐磁,界面視圖的控制器又有獨立的類進行處理,另外讲岁,它的一些處理,還可以放到一些代理類里面進行處理(如上圖截圖里面的應用程序委托類)衬以,這個其實有點類似于WPF的方式了缓艳,界面可以通過其他工具進行設計開發(fā)。
一般來說看峻,我們在XCode中創(chuàng)建一個視圖的時候阶淘,同時也會創(chuàng)建一個空白的XIB后綴名的視圖界面,視圖控制器就是管理模型數(shù)據(jù)(和模型邏輯調(diào)用)互妓,然后以一定的方式呈現(xiàn)視圖內(nèi)容溪窒,也就是說坤塞,控制器對模型和視圖都有全權的控制處理;而視圖如果要通知控制器澈蚌,一般在IOS里面采用代理的方式或者Target-Action方式進行通信摹芙,它的關系可以通過斯坦福教授那個IOS開發(fā)介紹的圖形進行闡釋,如下所示宛瞄。



我們?nèi)绻菑氖逻^C#的Winform開發(fā)的浮禾,或者WebForm的話,那么可能很不習慣份汗,在IOS里面盈电,界面設計和處理代碼是分開的,它利用XML來描述界面(XIB文件)杯活,另外匆帚,對于界面的后臺處理,通過視圖控制器進行旁钧,而每個視圖里面吸重,可能還會放置一些子視圖,如WebView均践,TableView等這樣的視圖晤锹,如果需要這些具體的視圖操作,那么還需要在視圖控制器里面使用視圖代理接口彤委,如子視圖的繪制和數(shù)據(jù)源的接口鞭铆,選擇視圖某部分等操作,都是通過代理接口進行處理焦影,而對于一些按鈕的操作车遂,則是通過Target-Action這樣的模式進行響應。反觀C#里面的Winform開發(fā)斯辰,可能不會劃分那么復雜舶担,多數(shù)是通過事件等方式對數(shù)據(jù)進行綁定或者按鈕事件的響應,要了解IOS的開發(fā)模式彬呻,可能這里需要特別注意調(diào)整的地方衣陶。
隨著認識的深入,你會慢慢了解這個模式對于界面的設計闸氮,代碼的維護分別的很清楚剪况,維護很方便。

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

首先译断,我們和在VS里面開發(fā)WInform項目一樣,需要先繪制好界面或悲,我們先把界面設計好向如下圖形所示孙咪,這個工作沒有什么特別之處堪唐,就是把它拖動到面板上,調(diào)整位置和布局即可翎蹈。
為了好看淮菠,我在XCode的項目里面導入了一個圖片,然后指定了按鈕的背景圖片杨蛋,如下所示兜材。



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


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


最后視圖實現(xiàn)類的代碼如下所示

#import "MyHelloAppViewController.h"

@interface MyHelloAppViewController ()

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

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

- (IBAction)getResult:(id)sender;

@end

然后我們在后臺代碼里面装黑,實現(xiàn)getResult的方法內(nèi)容副瀑,把輸入的內(nèi)容在彈出視圖里面進行展示,如下所示恋谭。

- (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里面的瀏覽器就是很好的例子橄教,橫豎總適宜的清寇。
我們上面方式創(chuàng)建的界面喘漏,雖然界面元素比較少,但是一旦橫著來看华烟,那么它的效果就是固定寬度的了翩迈。



如果需要讓它們的元素能夠根據(jù)界面自動調(diào)整,就需要設置控件的約束盔夜,如下所示负饲。



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

通過指定幾個不同方向的約束椭微,就能夠很好的控制輸入框的大小了洞坑,讓它可以根據(jù)界面的調(diào)整而自動進行調(diào)整,運行模擬器蝇率,得到的界面效果如下所示迟杂,輸入框的寬度已經(jīng)能夠自動伸縮了。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本慕,一起剝皮案震驚了整個濱河市排拷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锅尘,老刑警劉巖监氢,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鉴象,居然都是意外死亡忙菠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門纺弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牛欢,“玉大人,你說我怎么就攤上這事淆游“茫” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵犹菱,是天一觀的道長拾稳。 經(jīng)常有香客問我,道長腊脱,這世上最難降的妖魔是什么访得? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上悍抑,老公的妹妹穿的比我還像新娘鳄炉。我一直安慰自己,他們只是感情好搜骡,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布拂盯。 她就那樣靜靜地躺著霉颠,像睡著了一般熔号。 火紅的嫁衣襯著肌膚如雪伪节。 梳的紋絲不亂的頭發(fā)上一也,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天叁丧,我揣著相機與錄音纬凤,去河邊找鬼避矢。 笑死畜疾,一個胖子當著我的面吹牛蜕便,可吹牛的內(nèi)容都是我干的劫恒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼轿腺,長吁一口氣:“原來是場噩夢啊……” “哼两嘴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起族壳,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤憔辫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仿荆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贰您,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年拢操,在試婚紗的時候發(fā)現(xiàn)自己被綠了锦亦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡令境,死狀恐怖杠园,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舔庶,我是刑警寧澤抛蚁,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站惕橙,受9級特大地震影響瞧甩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弥鹦,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一肚逸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦朦促、人聲如沸犬钢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至混滔,卻和暖如春洒疚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坯屿。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工油湖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人领跛。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓乏德,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吠昭。 傳聞我的和親對象是個殘疾皇子喊括,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容