【问题标题】:In iOS, how do I reference an object in a view that is created with a xib file?在 iOS 中,如何在使用 xib 文件创建的视图中引用对象?
【发布时间】:2011-06-13 12:51:33
【问题描述】:

我有一个在 appDelegate 中实例化并推送到导航控制器的视图控制器。视图控制器的视图是使用 xib 文件创建的。 xib 文件将 UILabel 放在视图上(除其他外)。现在我需要以编程方式设置标签的文本属性,但我不知道如何获取对它的引用。如何引用标签对象?

我正在使用 xcode 3.2.5 并构建一个 iPad 应用程序。

【问题讨论】:

    标签: objective-c ios uiview xib


    【解决方案1】:

    您使用所谓的“插座”来执行此操作。您在控制器中定义它们,将它们清楚地标记为IBOutlet,然后在 Interface Builder 中将它们连接到您的文件所有者(或在 IB 中创建的其他委托对象)。

    例如,在您的FooController.m 中,您可能有这样的:

    @interface FooController ()
    @property (nonatomic, weak) IBOutlet UILabel* fooLabel;
    @end
    

    然后您将选择您的标签,然后控制从它拖动到文件所有者,或者转到其连接选项卡,然后从引用插座下的+ 拖动到文件所有者并选择fooLabel

    更新:代码示例已更改以反映处理此案例的现代方式。

    【讨论】:

    • 这是一个很好且有用的答案。谢谢你。我会给它一个绿色检查,但显然我不能检查两个不同的答案,即使它们都很好并且我已经检查了另一个。
    【解决方案2】:

    除了IBOutlets,您还可以在IB中的标签上设置标签属性。然后,当你需要它时,你可以这样做:

    UILabel *label = (UILabel *)[self.view viewWithTag:111];
    

    111当然是你在IB中分配给标签的标签。

    【讨论】:

    • 这很好。我从来不知道如何使用标签,现在我知道了。非常感谢!
    • 你测试了上面提供的代码吗?根据 Apple 的文档,viewWithTag 返回一个 UIView——仅此而已:“返回其标签与指定值匹配的视图。”运行时错误确认了文档所述的内容,因为它期待一个视图:2016-03-13 17:28:40.961 LumaCoreData[5211:1212054] -[UIView value]: unrecognized selector sent to instance 0x14d6dbc00 2016-03-13 17:28:40.962 LumaCoreData[5211:1212054] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIView 值]:无法识别的选择器发送到实例 0x14d6dbc00”
    【解决方案3】:

    [self.view viewWithTag:NUMBER_OF_TAG]; 可以解决问题。但请记住,如果您想访问视图,您必须在 viewWillAppear 或 viewDidAppear 事件中进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多