97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠(yuǎn)見(jiàn)教育科技集團(tuán) >> iOS資料 >> iOS應(yīng)用程序開(kāi)發(fā)教程:九、實(shí)施視圖控制器  
 
iOS應(yīng)用程序開(kāi)發(fā)教程:九、實(shí)施視圖控制器
分享到:

實(shí)施視圖控制器包括這幾部分:為用戶姓名添加屬性,實(shí)施 changeGreeting: 方法,確保用戶輕按“Done”時(shí)鍵盤消失。

一、為用戶姓名添加屬性

你需要為保存用戶姓名的字符串添加屬性聲明,這樣你的代碼就總能引用該字符串。因?yàn)榇藢傩员仨毷枪驳模磳?duì)客戶端和子類為可見(jiàn),所以須將此聲明添加到視圖控制器的頭文件,即HelloWorldViewController.h。公共屬性表示你打算如何使用這一類的對(duì)象。

屬性聲明是一個(gè)指令,它告訴編譯器如何為變量(例如用來(lái)保存用戶姓名的變量)生成存取方法。(添加屬性聲明后,你將了解到有關(guān)存取方法的信息。)

到此為止,不需要對(duì)串聯(lián)圖文件做出任何進(jìn)一步的修改。要騰出更多空間以按照以下步驟來(lái)添加代碼,請(qǐng)?jiān)俅吸c(diǎn)按“Utilities View”按鈕來(lái)隱藏實(shí)用工具區(qū)域(或者選取“View”>“Utilities”>“Hide Utilities”)。

為用戶姓名添加屬性聲明

1. 在項(xiàng)目導(dǎo)航器中,選擇 HelloWorldViewController.h。

2. 在 @end 語(yǔ)句前,為字符串編寫一個(gè) @property 語(yǔ)句。

屬性聲明應(yīng)該是這樣的:

@property (copy, nonatomic) NSString *userName;

可以拷貝和粘貼以上代碼,也可以在編輯器面板中鍵入以上代碼。如果你決定鍵入代碼,請(qǐng)注意 Xcode 會(huì)根據(jù)鍵入內(nèi)容提供自動(dòng)補(bǔ)齊的建議。例如,開(kāi)始鍵入 @prop...Xcode 猜測(cè)你想要鍵入 @property,因此會(huì)在內(nèi)聯(lián)建議面板中顯示這樣一個(gè)符號(hào)(如下圖所示):

如果建議合適(如上述示例所示),則按下 Return 鍵接受建議。

隨著你繼續(xù)鍵入,Xcode 可能提供一個(gè)建議列表供你選取。例如隨著你鍵入 NSStr...,Xcode 可能顯示如下補(bǔ)齊列表:

Xcode 顯示補(bǔ)齊列表時(shí),按下 Return 鍵以接受高亮顯示的建議。如果高亮顯示的建議不正確(如上圖所示列表),可使用箭頭鍵從列表中選擇合適的項(xiàng)目。 編譯器自動(dòng)為你聲明的任何屬性合成存取方法。存取方法是一種獲取或設(shè)定一個(gè)對(duì)象的屬性的值的方法(因此,存取方法有時(shí)也稱為“getter”和“setter”)。例如,編譯器為剛剛聲明的userName 屬性生成以下的 gettersetter 聲明及其實(shí)現(xiàn):

· - (NSString *)userName;

· - (void)setUserName:(NSString *)newUserName;

編譯器也自動(dòng)聲明專有實(shí)例變量以支持每一個(gè)經(jīng)聲明的屬性。例如,編譯器聲明名為 _userName 的實(shí)例變量以支持 userName 屬性。

注:編譯器將生成的存取方法添加到編譯代碼,而不是添加到你的源代碼中。

二、實(shí)施 changeGreeting: 方法

在前面的教程中,你已經(jīng)配置了“Hello”按鈕,因此在用戶輕按該按鈕時(shí),它發(fā)送 changeGreeting: 消息給視圖控制器。作為響應(yīng),你想要視圖控制器將用戶在文本欄中輸入的文本顯示在標(biāo)簽中。具體來(lái)說(shuō),changeGreeting:

方法應(yīng)該:

·從文本欄取回字符串,并將視圖控制器的 userName 屬性設(shè)定為此字符串。

·基于 userName 屬性,創(chuàng)建新的字符串,并將其顯示在標(biāo)簽中。

實(shí)施 changeGreeting: 方法

1. 如有需要,在項(xiàng)目導(dǎo)航器中選擇 HelloWorldViewController.m。

你可能需要滾動(dòng)到文件的末尾才能看到 changeGreeting: 存根實(shí)現(xiàn),它是 Xcode 為你添加的。

2. 添加以下代碼來(lái)完成 changeGreeting: 方法的存根實(shí)現(xiàn):

- (IBAction)changeGreeting:(id)sender {,

        self.userName = self.textField.text;

        NSString *nameString = self.userName;v
        if ([nameString length] == 0) {
            nameString = @"World";
        }
        NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];
        self.label.text = greeting;
    }

changeGreeting: 方法中有幾項(xiàng)有趣的事值得注意:

·self.userName = self.textField.text; 從文本欄取回文本,并將視圖控制器的 userName 屬性設(shè)定為該結(jié)果。

在本教程中,你不會(huì)在其他任何地方用得上那個(gè)保存著用戶姓名的字符串,但重要的是你要記住它的角色:這正是視圖控制器所管理的非常簡(jiǎn)單的模型對(duì)象。一般情況下,控制器應(yīng)在它自己的模型對(duì)象中維護(hù)應(yīng)用程序數(shù)據(jù)的相關(guān)信息。換句話說(shuō),應(yīng)用程序數(shù)據(jù)不應(yīng)儲(chǔ)存在用戶界面元素(例如 HelloWorld 應(yīng)用程序的文本欄)中。

·NSString *nameString = self.userName; 創(chuàng)建一個(gè)新的變量(為 NSString 類型)并將其設(shè)為視圖控制器的 userName 屬性。

·@"World" 是一個(gè)字符串常量,用 NSString 的實(shí)例表示。如果用戶運(yùn)行應(yīng)用程序但不輸入任何文本(即 [nameString length] == 0),nameString 將包含字符串“World”。

·initWithFormat: 方法是由 Foundation 框架提供給你的。它創(chuàng)建一個(gè)新的字符串,按你提供的格式字符串所規(guī)定的格式(很像 ANSI C 庫(kù)中的 printf函數(shù))。

在格式字符串中,%@充當(dāng)字符串對(duì)象的占位符。此格式字符串的雙引號(hào)中的所有其他字符都將如實(shí)顯示在屏幕上。

三、將視圖控制器配置為文本欄的委托

如果生成并運(yùn)行應(yīng)用程序,在點(diǎn)按按鈕時(shí)應(yīng)該會(huì)看到標(biāo)簽顯示“Hello, World!”。如果你選擇文本欄并開(kāi)始在鍵盤上鍵入,你會(huì)發(fā)現(xiàn)完成文本輸入后,仍然無(wú)法讓鍵盤消失。

在 iOS 應(yīng)用程序中,允許文本輸入的元素成為第一響應(yīng)器時(shí),鍵盤會(huì)自動(dòng)出現(xiàn);元素失去第一響應(yīng)器狀態(tài)時(shí),鍵盤會(huì)自動(dòng)消失。(前面提到過(guò)第一響應(yīng)器是第一個(gè)接收各種事件通知的對(duì)象,例如輕按文本欄來(lái)調(diào)出鍵盤。)雖然無(wú)法從應(yīng)用程序直接將消息發(fā)送給鍵盤,但是可以通過(guò)切換文本輸入 UI 元素的第一響應(yīng)器狀態(tài)這種間接方式,使鍵盤出現(xiàn)或消失。

UITextFieldDelegate 協(xié)議是由 UIKit 框架定義的,它包括 textFieldShouldReturn: 方法,當(dāng)用戶輕按“Return”按鈕(不管該按鈕的實(shí)際名稱是什么)時(shí),文本欄調(diào)用該方法。因?yàn)槟阋呀?jīng)將視圖控制器設(shè)定為文本欄的委托,可以實(shí)施該方法,通過(guò)發(fā)送 resignFirstResponder 消息強(qiáng)制文本欄失去第一響應(yīng)器狀態(tài),以該方法的副作用使鍵盤消失。

注:協(xié)議基本上只是一個(gè)方法列表。如果一個(gè)類符合(或采用)某個(gè)協(xié)議,則保證它可以實(shí)施該協(xié)議所要求的方法。(協(xié)議也可以包括一些可選的方法。)委托協(xié)議指定了一個(gè)對(duì)象可能向其委托發(fā)送的所有消息。

將 HelloWorldViewController 配置為文本欄的委托

1. 如有需要,在項(xiàng)目導(dǎo)航器中選擇 HelloWorldViewController.m。

2. 在 HelloWorldViewController.m文件中實(shí)施 textFieldShouldReturn: 方法。

此方法應(yīng)該指示文本欄放棄第一響應(yīng)器的狀態(tài)。實(shí)現(xiàn)結(jié)果應(yīng)該是這樣的:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
        if (theTextField == self.textField) {
            [theTextField resignFirstResponder];
        }
        return YES;
    }

在本應(yīng)用程序中,沒(méi)有必要真正測(cè)試 theTextField == self.textField 表達(dá)式,因?yàn)橹挥幸粋(gè)文本欄。但這是一個(gè)很好的模式,因?yàn)橛行﹫?chǎng)合你的對(duì)象可能是不只一個(gè)同類對(duì)象的委托,所以可能有需要對(duì)它們加以區(qū)分。

3. 在項(xiàng)目導(dǎo)航器中選擇 HelloWorldViewController.h。

4. 在 interface 行的末尾,添加 <UITextFieldDelegate>

你的接口聲明應(yīng)如下圖所示:

@interface HelloWorldViewController :UIViewController <UITextFieldDelegate>
    …

此聲明指定 HelloWorldViewController 類采用 UITextFieldDelegate 協(xié)議。

四、測(cè)試應(yīng)用程序

生成并運(yùn)行應(yīng)用程序。這一次,一切的表現(xiàn)都應(yīng)該如你所期望的那樣。在 Simulator 中,輸入你的姓名后,點(diǎn)按“Done”按鈕使鍵盤消失,然后點(diǎn)按“Hello”按鈕將“Hello, 你的姓名!”顯示在標(biāo)簽中。

如果應(yīng)用程序的表現(xiàn)不是你所期望的,則需要進(jìn)行故障排除。對(duì)于某些要檢查的區(qū)域,我們會(huì)在明天的教程中講到。

 更多相關(guān)文章

·iOS 應(yīng)用程序開(kāi)發(fā)教程:八、讓應(yīng)用程序具有輔助功能
·iOS 應(yīng)用程序開(kāi)發(fā)教程:七、建立文本欄的委托連接
·iOS 應(yīng)用程序開(kāi)發(fā)教程:六、為文本欄和標(biāo)簽創(chuàng)建 Outlet
·iOS 應(yīng)用程序開(kāi)發(fā)教程:五、為按鈕創(chuàng)建操作
·iOS 應(yīng)用程序開(kāi)發(fā)教程:四、添加用戶界面元素