在iPhone上进行开发(5):我们的第一个应用程序(III)

En 我们上一篇文章 我们在应用程序的界面中包含了一个 Label、一个 TextField 和一个 Button。 我们希望在单击 Button 时使用在 TextField 中输入的内容更新 Label 的内容。 我们已经(步骤 1)创建了项目,并且(步骤 2)使用 InterfaceBuilder 来定义屏幕。 现在我们将继续执行其余步骤以使应用程序正常工作。

步骤 3. 在 ViewController 中创建变量。

我们的界面正确。 事实上,如果我们进行 Build & Go,我们可以看到我们是如何做的:

但显然按下按钮时没有任何反应,因为我们还没有进行最低限度的基本开发。 在这第 3 步中,我们将在接口(.h 文件)和实现(.m 文件)中引入 HelloWorldViewController 中的变量和方法。 为此,正如我们在上一篇文章末尾指出的,我们必须知道 TextField 对应于 UITextField 类,而 Label 对应于 UILabel 类。 这两个类在 UIKit 框架内。

如果我们还没有关闭并保存 Interface Builder,我们会这样做,并在 XCode 中打开文件 HelloWorldViewController.h。 现在的代码将是这样的:

我们已经在研究一些 Objective-C。 在这段代码中,我们看到了 UIKit 库的导入声明,其中 UILabel 和 UITextField 类位于其中。 我们看到了接口是如何声明的,它是从 UIKit 的通用 UIViewController 扩展而来的。

在接口代码中,我们包含以下代码:

我们现在可以解释我们所做的:

  • 我们在@interface 块中声明了 UILabel 和 UITextField 类型的 2 个属性,分别具有 2 个变量名称 * label 和 * textField。 前方出现IBOutlet。 这是什么? 我们自己解释。 IBOutlet 不是一种变量; 是一个指令,帮助 Interface Builder 知道这些 UILabel 和 UITextField 类型的变量的存在。 顺便说一下,请记住,在上一篇文章中,我们已经给了您一个技巧来了解 Interface Builder 中控件对象(按钮、标签、文本字段等)的变量类型。 另一方面,变量名前面的 * 问题可能会让 Java 程序员感到惊讶,而不是 C 的程序员......但要了解这就是在 Objective-C 中编写实例变量的方式。
  • 声明了 UILabel 和 UITextField 属性。 nonatomic 和 retain 我们暂时不会看到,它与内存管理有关。
  • 我们看到我们声明了一个方法,updateText。 它前面有一个-号,表示它是一个实例方法,而不是一个类方法(+号为他们解释)。 我们无法解释这一点,因为这是基本的面向对象编程……该方法不返回任何内容(即 void)并接收类型为 id 的参数。 基本上它指的是将导致调用我们的 updateTexto 方法的对象的标识符,该方法将更新标签的值。 我们可以猜测,因为该控件将是按钮本身......

一旦完成,我们就完成了第 3 步。


步骤 4. 将视图控件绑定到控制器变量。

如果我们回顾一下,一方面我们已经开发了与 Interface Builder 的接口,另一方面我们在 HelloWorldViewController.h(HelloWorldViewController.m 控制器类的接口)中有与这些控件相关的变量。 但是,视图和控制器之间仍然没有任何关系,即我们没有给出任何相关的指令,例如我们在Interface Builder中设计的文本字段与我们放入的UITextField类型的变量类。 现在我们要做这个任务。 我们通过单击 HelloWorldViewController.xib 再次打开 Interface Builder,单击文本框,然后在 Inspector 面板中我们转到第二个选项卡(Text Field Connections)。 我们看到有一个叫做引用插座的部分,没有任何标记。 这意味着目前 Interface Builder 不知道此文本字段与类的 IBOutlet(Interface Builder Outlet)之间的任何关系……但是我们的 HelloWorldViewController 中有一个 UITextField IBOutlet,因此我们将链接它。

为此,如图中所示,通过单击“New Referencing Outlet”旁边的小圆圈,我们将其拖到名为 HelloWorldViewController.xib 的窗口的 F​​ile's Owner。 它将让我们选择 2 个选项,view(完整视图)和 textField(我们的变量)。 显然我们选择了 textField,因此我们将我们的文本框与其类型为 UITextField 的变量相关联。 顺便说一句,File'sOwner 或文件的所有者既不大于也不小于我们的控制器类......

我们使用标签重复操作,将其与我们的控制器变量标签相关联。 而使用按钮,则有所不同。 在这种情况下,我们将把它与我们的 updateTexto 操作相关联,但针对特定事件。 使用“Touch Up Inside”事件执行此操作,然后选择我们的 updateTexto 方法:

通过这种方式,我们已经将我们在 Interface Builder 中定义的控件和我们放入控制器中的变量相关联。 我们关闭 Interface Builder 保存所有内容,然后转到返回 XCode 的最后一步。

步骤 5. 最新进展。

在 XCode 中,我们打开 HelloWorldViewController.my 并放入以下代码,使我们的类看起来像这样:

如果我们仔细观察,我们只是简单地放置了块@synthesize,以及在接口 .h 中声明的方法的实现,updateTexto。 在该代码下方,您将有很多带注释的代码。

@synthesize 行的作用类似于生成 OO 语言(封装)中典型的典型 getter / setter (访问器 / mutator)。 我们需要它们以便控制器到达内容,例如,文本框的内容。

如您所见,updateTexto 方法只是用文本字段的内容更新我们标签的文本。 我们完了。

现在,我们只需执行 Build & Go,您将看到当您输入文本字符串并单击按钮时,标签的内容已更新。 在下一篇文章中,我们将介绍对我们的应用程序的改进。


在 Google 新闻上关注我们

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   彼得

    非常好的教程,非常清晰和简单。

  2.   rubdotto.com

    好吧,我一定很甜🙁因为它对我不起作用。 我已经捕获了一个字符串中的值,它需要文本,但它没有将它分配给标签,至少它没有绘制它,因为我尝试查看 label.text 并且它告诉我超出范围......

  3.   leo2279

    你的教程很棒,它真的很好地解释了iphone的这个开发,我希望你继续发布更多的教程。

    问候

  4.   Mariano

    嗨,一切都很好,但它不起作用。 为了使它工作,我必须将界面构建器的视图与多维数据集中的视图链接起来,就像你教的文本字段和标签一样。 其余的,非常感谢。