您的首個iOS應用程式-實施檢視
一、為使用者姓名新增屬性
-
- 您需要為儲存使用者姓名的字串新增屬性宣告,這樣您的程式碼就總能引用該字串。
- 因為此屬性必須是公共的,即對客戶端和子類為可見,所以須將此宣告新增到檢視控制器的標頭檔案,
- 即
HelloWorldViewController.h
。公共屬性表示您打算如何使用這一類的物件。 - 屬性宣告是一個指令,它告訴編譯器如何為變數(例如用來儲存使用者姓名的變數)生成存取方法。
1)為使用者姓名新增屬性宣告:
@property (copy, nonatomic) NSString *userName;
-
- 編譯器自動為您宣告的任何屬性合成存取方法。存取方法是一種獲取或設定一個物件的屬性的值的方法
- 因此,存取方法有時也稱為“getter”和“setter”。
- 例如,編譯器為剛剛宣告的
userName
屬性生成以下的 getter 和 setter 宣告及其實現: - (NSString *)userName;
- (void)setUserName:(NSString *)UserName;
- 編譯器也自動宣告專有例項變數以支援每一個經宣告的屬性。
- 例如,編譯器宣告名為
_userName
的例項變數以支援userName
屬性。 - 注:編譯器將生成的存取方法新增到編譯程式碼,而不是新增到您的原始碼中。
二、實現changeGreeting:
方法
- (IBAction)changeGreeting:(id)sender { self.userName = self.textField.text; NSString *nameString = self.userName;if ([nameString length] == 0) { nameString = @"World"; } NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString]; self.label.text = greeting; }
changeGreeting:
方法中有幾項有趣的事值得注意:
-
-
self.userName = self.textField.text;
從文字欄取回文字,並將檢視控制器的userName
屬性設定為該結果。在本教程中,您不會在其他任何地方用得上那個儲存著使用者姓名的字串,
-
但重要的是您要記住它的角色:這正是檢視控制器所管理的非常簡單的模型物件。
-
一般情況下,控制器應在它自己的模型物件中維護應用程式資料的相關資訊。
-
換句話說,應用程式資料不應儲存在使用者介面元素(例如 HelloWorld 應用程式的文字欄)中。
-
NSString *nameString = self.userName;
建立一個新的變數(為NSString
型別)並將其設為檢視控制器的userName
屬性。 -
@"World"
是一個字串常量,用NSString
的例項表示。 -
如果使用者執行應用程式但不輸入任何文字(即
[nameString length] == 0
),nameString
將包含字串“World”。 -
initWithFormat:
方法是由 Foundation 框架提供給您的。 -
它建立一個新的字串,按您提供的格式字串所規定的格式(很像 ANSI C 庫中的
printf
函式)。 -
在格式字串中,
%@
充當字串物件的佔位符。此格式字串的雙引號中的所有其他字元都將如實顯示在螢幕上
-
三、實現檢視控制器作為文字框的代理物件的委託方法
-
- 在
HelloWorldViewController.m
檔案中實施textFieldShouldReturn:
方法。 - 此方法應該指示文字欄放棄第一響應器的狀態。實現結果應該是這樣的:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { if (theTextField == self.textField) { [theTextField resignFirstResponder]; } return YES; }
在本例項中,判斷theTextField 是否為當前的文字框是沒有意義的,因為在本例項中只有一個文字框,也就只有一個響應者。
- 但是,在大多數情況下不可能只有一個文字框,,這時就需要進行判斷,所以這是一個很符合邏輯的判斷。
- 在
接下來:
-
- 在專案導航器中選擇
HelloWorldViewController.h
。 - 在
@interface
行的末尾,新增<UITextFieldDelegate>
。 - 您的介面宣告應如下圖所示:
@interface HelloWorldViewController :UIViewController <UITextFieldDelegate>
此宣告指定
HelloWorldViewController
類採用了UITextFieldDelegate
協議。 - 最終結果如下;
-
在 Simulator 中,輸入您的姓名後,點按“Done”按鈕使鍵盤消失,然後點按“Hello”按鈕將“Hello, 您的姓名!”顯示在標籤中。
如果應用程式的表現不是您所期望的,則需要進行故障排除。
- 在專案導航器中選擇