使用"Interface Builder"建立的畫面,其中有許多控制元件在其中,
但…,要怎麼才可透過程式來控制畫面上的控制元件呢?!
我是iOS工程師, 我已經有了自訂的"Controller", 但...我怎麼還是控制不到放在底層View上面的Button按鈕?! |
我是最底曾的View,在我上面住著一個Button按鈕, Hello,Button按鈕! |
Hello,我是Button按鈕 ,我住在最底層的View之上 |
我要控制你這個Button按鈕! 將你上面的文字變成"OK", 但我到底要怎麼做才好?! 我不是有個Controller了嗎?! |
iOS工程師,我是Controller, 其實Interface Builder建立的畫面都是存在xml中的, 我並不知道有Button按鈕的存在, 因此你必須在我這個Controller上產生一個插座 - IBOutlet, 讓該Interface Builder知道, Button按鈕必須與我連繫, 這樣你就可以透過我 , 以程式的方式變更Button按鈕上的文字了! |
第1步:建立一個名為"IBOutlet"的"Single View Application"專案。
第2步:選取"MainStoryboard.storyboard"檔案,並於右下方拖拉出"Round Rect Button"按鈕。
第3步:點選右上方Editor中的中間按鈕"Assistant editor",將Controller對應的Controller程式碼叫出來,此時您會停留在"ViewController.h"標頭檔上,您會發現這裡已經為您建立一個叫"ViewController"的自訂Controller。
第3步:接著,在ViewController中產生一個Button按鈕的插座 - Outlet
- 3.1 對Button按鈕按右鈕(Mac觸碰板是雙指同擊觸碰),接著找到"New Referencing Outlet",右邊有個空心小圓點,按下它不放,並收它拖到@interface與@end之間,以產生此Button按鈕的Outlet。
- 3,2 為這個Outlet取個"button"的名字(實際上即一個實體變數的名字),最後按下"Connect"完成連結。
- 3.3 這時你會發現多了個@property名為button的屬性,而其中還有個與宣告屬性完全的關鍵字"IBOutlet",其中"IB"即是Interface Builder的縮寫,而"IBOutlet"即是Interface Builder用以記錄這裡有個Outlet用以連繫。
第4步:加上程式碼,以變更Button按鈕上的文字
- 4.1 在"ViewController.h"的上方,按一下向右的箭頭,請它自動找到對應的"ViewController.m"實作檔,當您看到"@implementation"關鍵字即為實作檔,接著找到viewDidLoad()函式。
- 4.2 於viewDidLoad()函式中加上變更Button按鈕的文字為的程式
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.button setTitle:@"OK" forState:UIControlStateNormal];
}
第5步:執行,您會發現button按鈕的字樣,真的透過程式變更成"OK"了。
檔案連結:IBOutlet.zip
運作原理:IBOutlet在Controller的標頭檔中只是一個標記,沒有任何作用,主要是讓Interface Builder可以認得這是一個插座,用以將Interface Builder上的View元件對應到相關的屬性上,而這個對應的資訊實際則保存在Interface Builder的xml檔中。當然,其他View元件也是可以透過IBOutlet的方式,將View元件對應到Controller上,以便後續的程式操作。
哈哈,我是一個Button按鈕,雖然您可以透過IBOutlet讓Controller控制我,但…對於你想叫我在"被你按下時"執行一些你想要作的動作、或是執行程式,門都沒有,你是沒辦法展控我的行為的!!