码迷,mamicode.com
首页 > 移动开发 > 详细

您的首个iOS应用程序-实施视图

时间:2019-01-04 20:26:49      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:指定   维护   模型   rop   res   nsstring   有趣   inter   常量   

          一、为用户姓名添加属性

    • 您需要为保存用户姓名的字符串添加属性声明,这样您的代码就总能引用该字符串。
    • 因为此属性必须是公共的,即对客户端和子类为可见,所以须将此声明添加到视图控制器的头文件,
    • 即 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, 您的姓名!”显示在标签中。

      如果应用程序的表现不是您所期望的,则需要进行故障排除。

       

 

 

 

              

 

您的首个iOS应用程序-实施视图

标签:指定   维护   模型   rop   res   nsstring   有趣   inter   常量   

原文地址:https://www.cnblogs.com/ken134207/p/10222088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!