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

Posted ken134207

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了您的首个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, 您的姓名!”显示在标签中。

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

       

 

 

 

              

 

以上是关于您的首个iOS应用程序-实施视图的主要内容,如果未能解决你的问题,请参考以下文章

基于 Amazon Amplify 构建自己的首个 iOS 应用程序

打造您的首个 app bundle | MAD Skills

基于 Amazon Amplify 构建自己的首个 iOS 应用程序

基于 Amazon Amplify 构建自己的首个 iOS 应用程序

云原生IDE:iVX免费的首个通用无代码开发平台

云原生IDE:iVX免费的首个通用无代码开发平台