從零開始學ios開發(三):第一個有交互的app

感謝你們的關注,也給我一份動力,讓我繼續前進。有了本身的家庭有了孩子,過着上有老下有小的生活,可以擠出點時間學習真的很難,天天弄好孩子睡覺已是晚上10點左右了,而後再弄本身的事情,一轉眼很快就到12點了,就要去睡了,如今身體湯不牢啊,若是不早點睡,次日上班確定沒精神,要靠紅牛了,呵呵,在這樣的狀況下再擠出時間學習ios真的很困難,只能是見縫插針,抓緊一切可用的時間學習,時間,擠一擠總歸是有的,只是多少問題。ios

這幾天看來書的第三章,主要講了如何添加按鈕,而後爲按鈕添加響應事件,當點擊按鈕後,觸發按鈕的響應事件,從而改變一個Label上的顯示文字。若是這個放在VS裏面,真的是小菜一疊,可是在ios裏面,差異很大,不少東西第一次接觸會很混淆,下面就一點點介紹如何建立第一個有交互的app吧。編程

1)建立一個新的project,選擇「Single View Application」,命名爲「Button Fun」,而後保存。app

這裏簡單的解釋一下什麼是「Automatic Reference Counting」,簡稱ARC,是ios的一種垃圾回收機制,即自動釋放再也不使用的變量,釋放內存,這個和C#中的垃圾回收有點相似,可是至於他們是如何實現的,就不是很清楚了,反正記住這個是用來自動釋放變量從而騰出內存空間的就能夠了,暫時這麼認爲吧,之後用更深刻的瞭解,再詳細描述。iphone

2)添加2個Button和1個Label 選中project navigate中的「BIDViewController.xib」,添加Button的方法和上一篇中添加Label的方法同樣,直接從Object Library裏面拖就能夠,在Object Library中找到「Round Rect Button」 拖2個到界面中,添加完後的效果以下 上圖中,將2個button分別根據輔助線放到了屏幕的左右兩邊上下劇中的位置,Label放在最上面,而後將Label拉長,拉到出現輔助線的位置。學習

3)添加button文字,去除Label文字 在Xcode中,改變文字的方法有3種,第一種選中button,而後在Attributes Inspector中改變Title的屬性值   第二種方法是直接用鼠標在button上雙擊,而後鍵入須要的文字便可(這個和VS裏面有很大的不一樣,在VS中雙擊一個按鈕是添加一個單擊事件,而在Xcode中,則是改變button的文字,因此說是VS比較簡單嘛) 第三種就是用代碼改變文字。this

分別將左右兩個按鈕的文字改爲「Left」和「Right」,使用一樣的方法,去除Label上的文字,而且在Attributes Inspector中將Label的文字對齊方式設置爲劇中,最後的界面效果以下 atom

4)Outlet和Action(這一小節的敘述不必定徹底正確,只是本人的我的理解,若是有不對的地方,望你們可以指出,謝謝!) 這兩個概念是我學習ios開發以來遇到的第一個難點,其實說難不難,就是很搞,一開始沒有理解它的意思。spa

Outlet:簡單來講就是C/C++裏面的指針,指向一個對象,或者說是一個對象的引用,例如一個Label,一個Button等。在C# Winform中,咱們會爲每個控件設定一個name,那麼在編程時,直接使用這個name就能夠對該控件進行操做,可是在ios裏面,狀況變得有些複雜,控件沒有name,就是說你拖一個控件過來,這個控件是沒有本身的name的,那麼要在code中操做這個控件該怎麼辦呢?定義一個Outlet,而後把這個Outlet指向該控件,在code中就用這個Outlet來操做這個控件,好吧,稍稍有些複雜。3d

舉兩個Outlet的例子:指針

@property (weak, nonatomic) IBOutlet UILabel *statusText;

以上僅僅是一個Outlet的定義,說明這個Outlet會指向一個Label控件,可是並無說明指向哪個Label。

@property (weak, nonatomic) IBOutlet UIButton *leftButton;

一樣,上面僅僅是一個Outlet的定義,說明這個Outlet會指向一個Button控件,可是並無說明指向哪個Button。

Action:相對於Outlet,Action應該稍微簡單一點,它的做用就是定義一個事件,而後將控件和Action事件聯繫起來就能夠。Action的例子以下:

- (IBAction)buttonPressed:(id)sender;

這個和C# Winform有點相似,C#能夠單獨定義事件,而後將控件和事件使用「+=」操做符聯繫起來就能夠,雖然ios裏面沒有這個語法,可是也是須要聯繫的,聯繫創建起來之後,控件就能夠觸發這個事件了。

但願以上對Outlet和Action的簡單說說明你們可以看懂,其實我本身也沒有百分百搞明白,先將本身的理解寫下,之後有更深刻的理解後再進行補充。

5)爲Button添加事件 前面說過了,要添加事件,首先要建立一個Action,而後創建聯繫,Xcode比較智能,能夠幫咱們把這2步一塊兒進行。 a)選中project navigator中的BIDViewController.xib,顯示iphone的界面。 b)選中Xcode右上角的7個按鈕從左到右的第二個Show Assistant editor(快捷鍵:option+command+enter,菜單欄View>Assistant Editor>Show Assistant editor)

選中後的界面以下,會在iphone界面的右邊出現BIDViewController.h文件,咱們等會就要將button拖到這個文件裏,而後進行一些相應的設置,Xcode就會自動幫咱們創建控件和Action之間的聯繫。 接下來就是建立Action了,鼠標選中Left按鈕不放,按住鍵盤上的control鍵,而後鼠標移動到右邊的BIDViewController.h文件上,在@interface和@end中間放開鼠標

(此圖從書上截取,因此不太清楚) 會有一個框彈出來,以下

將上面的值設置成下面的內容

首先,咱們是建立一個Action,因此Connection選擇Action,而後爲事件命名爲buttonPressed,類型爲UIButton,說明是按鈕事件,最後單擊「Connect」按鈕,完成建立。建立完成後的代碼以下:(BIDViewController.h)

#import <UIKit/UIKit.h>

@interface BIDViewController : UIViewController
- (IBAction)buttonPressed:(id)sender;

@end

在BIDViewController.m中會自動添加該事件的方法

- (IBAction)buttonPressed:(id)sender {
}

爲Left按鈕添加好Action後,再爲Right按鈕添加一樣的事件,buttonPressed的參數sender能夠區分是由哪一個button觸發了該事件,因此咱們沒必要再爲Right button單獨的建立一個事件,直接將Right button關聯到buttonPressed就能夠了,關聯的方法也很簡單,鼠標選中Right按鈕不放,按住鍵盤上的control鍵,而後鼠標移動到右邊的BIDViewController.h文件的buttonPressed事件上面,而後放開鼠標,關聯完成。 (此圖從書上截取,因此不太清楚)

 6)爲Label添加Outlet 添加Outlet的方法和添加Action的方法同樣,只是在彈出框的參數選擇上略有區別,一樣,鼠標選中Label標籤,按住control,拖到BIDViewController.h文件中,放開鼠標後,一個彈出框彈出來 Connection保留默認值Outlet,Name中填寫「textStatus」做爲Outlet的名稱,其餘的選項都保留默認值便可,最後點擊「Connect」按鈕,Outlet建立完成。 建立完成後的代碼以下:(BIDViewController.h)

@property (weak, nonatomic) IBOutlet UILabel *textStatus;

在BIDViewController.m中會自動添加@synthesize,而後在viewDidUnload方法中添加對textStatus的釋放代碼。(viewDidUnload方法是系統自動建立的,當該View釋放時調用,即該View將不顯示了,其餘View要顯示時,該方法會調用到。)

複製代碼
@synthesize textStatus;
...
...
- (void)viewDidUnload
{
    [self setTextStatus:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
複製代碼

至此,全部的Action和Outlet都已經添加完畢,button能夠觸發buttonPressed事件,textStatus指向Label,能夠對Label進行操做。

7)寫Code 終於要開始寫代碼的,真心不容易啊。在BIDViewController.m的buttonPressed方法中添加如下代碼(其實也就2行而已)

- (IBAction)buttonPressed:(id)sender {
    NSString *title = [sender titleForState:UIControlStateNormal];
    textStatus.text = [NSString stringWithFormat:@"%@ button pressed.", title];
}

第一行:titleForState指的是按鈕在某個狀態時顯示的title,UIControlStateNormal獲得的是按鈕的通常狀態,即按鈕沒有被點擊,沒有獲取焦點時的狀態,那麼titleForState:UIControlStateNormal得到的是按鈕在一般狀態下的title。 第二行:將title賦值給Label用於顯示。 兩行代碼很簡單易懂,沒有什麼難點。

8)編譯運行 快捷鍵command+B,編譯程序。 快捷鍵command+R,運行程序。 固然,你也能夠直接點Run按鈕,直接編譯運行程序。

程序運行後的開始效果以下

點擊Left按鈕,Label顯示「Left button pressed.」,點擊Right按鈕,Label顯示「Right button pressed.」

 

至此,整個程序開發完畢!

9)感謝 整個章節學習下來,發現有不少和Visual Studio不一樣的地方,事件、控件引用等都有比較大的差別,有比較的學習,可能會取得更快的進步,才能學得透徹,理解的更深刻。固然,這只是一個開始,下一章,要學習更多的iphone上面的控件,下章再見!

 

Button_Fun.zip 

 

P.S. 這一篇學習筆記距離上一篇間隔了蠻長的時間,一是對iphone開發的不熟悉,學起來比較慢,另外一方面確實是時間有限,如今估計下來,一個禮拜的寫一篇記錄應該是一個比較理想的計劃,本人盡力爭取不拖太長的時間,努力學習,謝謝各位的捧場!

相關文章
相關標籤/搜索