Outlet 描述了兩個(gè)對(duì)象之間的連接。當(dāng)你想要一個(gè)對(duì)象(例如視圖控制器)和它包含的對(duì)象(例如文本欄)進(jìn)行通訊時(shí),須將被包含的對(duì)象指定為 outlet。應(yīng)用程序運(yùn)行時(shí),會(huì)恢復(fù)在 Xcode 中創(chuàng)建的 outlet,從而使對(duì)象在運(yùn)行時(shí)可以互相通訊。
在本教程中,你想要視圖控制器從文本欄獲取用戶的文本,然后將文本顯示在標(biāo)簽上。為確保視圖控制器可以和這些對(duì)象通訊,你在它們之間創(chuàng)建 outlet 連接。
為文本欄和標(biāo)簽添加 outlet 的步驟與添加按鈕操作的步驟非常相似。開(kāi)始之前,請(qǐng)確定主串聯(lián)圖文件仍然顯示在畫布上,而 HelloWorldViewController.m 在輔助編輯器中保持打開(kāi)。
為文本欄添加 outlet
1. 按住 Control 鍵將視圖中的文本欄拖移到實(shí)現(xiàn)文件中的類擴(kuò)展。隨著你按住 Control 鍵拖移,看到的應(yīng)該是這樣的:

在類擴(kuò)展內(nèi)部的任何地方松開(kāi) Control 鍵并停止拖移都沒(méi)有關(guān)系。在本教程中,文本欄和標(biāo)簽的 outlet 聲明出現(xiàn)在"Hello"按鈕的方法聲明的上面。
2. 在松開(kāi) Control 鍵并停止拖移時(shí)出現(xiàn)的彈出式窗口中,配置文本欄的連接:
· 確定"Connection"彈出式菜單包含"Outlet"。
· 在"Name"欄中,鍵入"textField"。
你可以給 outlet 隨意命名,但是如果 outlet 名稱與其表示的項(xiàng)目有關(guān)聯(lián),你的代碼會(huì)更便于閱讀。
· 確定"Type"欄包含"UITextField"。
將"Type"欄設(shè)定為"UITextField"可確保 Xcode 將 outlet 僅與文本欄連接。
· 確定"Storage"彈出式菜單包含默認(rèn)值"Weak"。
稍后在掌握基本的編程技能中,你將了解有關(guān)強(qiáng)儲(chǔ)存和弱儲(chǔ)存的更多信息。
3. 完成這些設(shè)置后,彈出式窗口看起來(lái)應(yīng)該是這樣的:
4. 
5. 在彈出式窗口中,點(diǎn)按"Connect"。
通過(guò)為文本欄添加 outlet,你完成了兩件事情:在這個(gè)過(guò)程中:
·Xcode 將合適的代碼添加到了視圖控制器類的實(shí)現(xiàn)文件
(HelloWorldViewController.m)。
具體來(lái)說(shuō),Xcode 將以下聲明添加到了類擴(kuò)展:
@property (weak, nonatomic) IBOutlet UITextField *textField;
注:IBOutlet 是一個(gè)特殊關(guān)鍵詞,僅用于告訴 Xcode 將對(duì)象作為 outlet 處理。它實(shí)際上的定義為什么都不是,因此在編譯時(shí)不起作用。
·Xcode 在視圖控制器和文本欄之間建立了連接。
通過(guò)在視圖控制器和文本欄之間建立連接,用戶輸入的文本可以傳遞給視圖控制器。和處理 changeGreeting: 方法聲明一樣,Xcode 在文本欄聲明的左邊顯示帶有填充的圓圈,以表示已經(jīng)建立連接。
注:較早版本的 Xcode 使用按住 Control 鍵拖移的方式將 @synthesize 指令添加到你所聲明的每個(gè)屬性的實(shí)現(xiàn)塊。因?yàn)榫幾g器自動(dòng)合成存取方法,所以這些指令是不必要的。你可以放心地將它們?nèi)縿h除。
現(xiàn)在為標(biāo)簽添加 outlet 并配置連接。在視圖控制器和標(biāo)簽之間建立連接,會(huì)讓視圖控制器以字符串(該字符串包含用戶輸入的文本)來(lái)更新標(biāo)簽。完成此任務(wù)的步驟與為文本欄添加 outlet 的步驟相同,只不過(guò)在配置時(shí)要做適當(dāng)修改。(確定 HelloWorldViewController.m 仍然顯示在輔助編輯器中。)
為標(biāo)簽添加 outlet
1. 按住 Control 鍵將視圖中的標(biāo)簽拖移到輔助編輯器中的 HelloWorldViewController.m 的類擴(kuò)展。
2. 在松開(kāi) Control 鍵并停止拖移時(shí)出現(xiàn)的彈出式窗口中,配置標(biāo)簽的連接:
·確定"Connection"彈出式菜單包含"Outlet"。
·在"Name"欄中,鍵入"label"。
·確定"Type"欄包含"UILabel"。
·確定"Storage"彈出式菜單包含"Weak"。
3. 在彈出式窗口中,點(diǎn)按"Connect"。
到此為止,你一共創(chuàng)建了三種到視圖控制器的連接:
·按鈕的操作連接
·文本欄的 Outlet 連接
·標(biāo)簽的 Outlet 連接
你可以在"Connections"檢查器中驗(yàn)證這些連接,為視圖控制器打開(kāi)"Connections"檢查器的具體方法如下:
1. 點(diǎn)按標(biāo)準(zhǔn)編輯器按鈕以關(guān)閉輔助編輯器,并切換到標(biāo)準(zhǔn)編輯器視圖。
標(biāo)準(zhǔn)編輯器按鈕是左邊的那個(gè)"Editor"按鈕,它是這樣的:
2. 點(diǎn)按"Utilities"視圖按鈕以打開(kāi)實(shí)用工具區(qū)域。
3. 在大綱視圖中選擇"Hello World View Controller"。
4. 在實(shí)用工具區(qū)域顯示"Connections"檢查器。
"Connections"檢查器按鈕是檢查器選擇欄右邊的那個(gè)按鈕,它是這樣的: 在"Connections"檢查器中,Xcode 顯示了所選對(duì)象(在本例中為視圖控制器)的連接。在工作區(qū)窗口中,你看到的應(yīng)該是這樣的:

你會(huì)發(fā)現(xiàn),在視圖控制器和其視圖之間,除了你創(chuàng)建的三個(gè)連接之外,還有一個(gè)連接。Xcode 提供了視圖控制器和其視圖之間的默認(rèn)連接;你不必用任何方式訪問(wèn)它,這些內(nèi)容我們會(huì)在明天的章節(jié)講到!
|