1. 程式人生 > >您的首個iOS應用程式-實施檢視

您的首個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, 您的姓名!”顯示在標籤中。

      如果應用程式的表現不是您所期望的,則需要進行故障排除。