【问题标题】:Do I need to create a controller for a UITextField?我需要为 UITextField 创建控制器吗?
【发布时间】:2012-02-02 18:41:18
【问题描述】:

刚开始使用 xcode 4.2 的 iPhone 应用程序。

我知道为我的应用程序中的每个视图使用 UIViewController 的子类是一种很好的做法,并且我可以在其中编写一些基本代码来测试相关视图上的按钮等。

现在我想在其中一个视图中对文本字段执行一些操作,假设我将使用 Value Changed 事件在每次击键时记录文本字段的内容。

我应该创建某种 UITextField 控制器子类吗?还是我在包含文本字段的现有 ViewController 子类中处理这种事情?

如果是后者,如何引用视图控制器子类中的文本字段并建立连接?

【问题讨论】:

    标签: iphone cocoa-touch xcode4 xcode4.2


    【解决方案1】:

    您可能希望您的UIViewController 实现UITextFieldDelegate。可以通过 Interface Builder 和 outlets 进行连接,或者只是在文本字段上设置委托并使用从委托回调中获得的引用。

    【讨论】:

      【解决方案2】:

      您将使用包含文本字段的现有 ViewController 子类。一个好的经验法则是每个视图屏幕(不包括 UINavigationController、Modal 屏幕、uisplitviewcontroller 和弹出框)一个 ViewController。

      要引用它,您可以在自定义 UIViewController 的 .h 中创建一个属性:

      @property (nonatomic,weak) IBOutlet UITextField * myTextField;
      

      注意 IBOutlet 关键字。这将允许您在 InterfaceBuilder(或您的故事板)中连接它。要了解如何连接,我建议您观看有关 IBOutlets 的视频,因为它更多的是视觉效果。

      【讨论】:

      • 非常感谢。我还可以通过将其声明为 ivar 来访问文本字段 - 制作属性有什么特别的好处吗?该属性是否以防其他类需要访问?
      • 我喜欢将它们设为属性,因为它更明确地定义了它们是强、弱还是赋值(尽管您也可以使用 ivars 来做到这一点,并且两者都默认为强)。我有点将 Outlet 视为可以从班级外部访问的东西,因为它是在 IB/Storyboard 中设置的,但这并不一定意味着您必须这样做,因为它使用自省来设置它们。我相信来自 Apple 的最新示例将 IBOutlets 设置为属性,但这是我遵循的约定。
      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 2017-04-19
      • 2012-01-12
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2020-08-01
      相关资源
      最近更新 更多