使用 IB / Xcode 4.5.1 和 iOS Simulator 6.0 自定义 UIView 操作方法

Posted

技术标签:

【中文标题】使用 IB / Xcode 4.5.1 和 iOS Simulator 6.0 自定义 UIView 操作方法【英文标题】:custom UIView how-to with IB / Xcode 4.5.1 and iOS Simulator 6.0 【发布时间】:2013-03-04 05:48:36 【问题描述】:

我知道有几个与此类似的问题,但我发现其中大多数不适用于当前的 IB / ios 或不完整。

我想要一个自定义 UIView,它有一个笔尖,但我没有正确地得到这个 hooked up。我花了几个小时调试,然后我就去了(也许坐在浴缸里)。如果您觉得这是一个简单的操作,请提前道歉;提前感谢您的帮助。

目前要做到这一点,我:

    创建自定义视图文件:文件 -> 新建 -> 文件 -> Objective-C 类并选择 UIView 的类型并将其命名为 MyView;创建了 MyView.h 和 MyView.m 创建自定义视图笔尖:文件 -> 新建 -> 文件 -> 用户界面 -> 视图并将其命名为“酷”; cool.xib 已创建 在 Cool.xib 的 IB 中,进入 Identity Inspector 并从 UIView -> MyView 设置自定义类;问题 #1 - 此时 MyView 是否知道在实例化 cool.xib 时加载它还是需要做更多工作? 另外,在 IB 中,我突出显示文件的所有者并将其自定义类设置为 MyView。 (? - 不确定) 我想创建一个文本标签,所以我将一个 UILabel 拖到 cool.xib 上,并在 MyView.h 中创建一个公共属性 (myLabel)。问题 #2 我是否需要为此设置自定义类为 MyView?我不认为这只是一个标准的 UILabel。 我有一个单视图应用程序,我想在它上面有一个 MyView/cool 的实例,所以在 IB 中,我将一个视图从对象检查器拖到 ViewController.xib 视图中。在 IB Identity Inspector 中,我将类设置为 MyView。我将 MyView.h 文件导入 ViewController.h 并在界面中为其设置属性。 在 ViewController.m 的 viewDidLoad 中,我将背景颜色设置为橙色并设置 myLabel(由 Xcode 填充,因此它似乎有点工作)。

我运行应用程序,背景颜色设置为橙色但没有标签,我很困惑为什么不呢?以上步骤是否有错误?

提前谢谢

【问题讨论】:

【参考方案1】:

在 cool.xib 的 IB 中,进入 Identity Inspector 并设置自定义 来自 UIView -> MyView 的类;问题 #1 - 此时 MyView 知道在实例化或需要更多时加载cool.xib 完成了吗?

它知道你的 XIB 是由那个类管理的。但是还需要做更多的工作,才能让你使用它。

跳过第四个问题。这适用于UIViewController,您可以在其中定义谁将负责它,以及文件的所有者。

我想创建一个文本标签,所以我将 UILabel 拖到 cool.xib 上 并在 MyView.h 中创建一个公共属性 (myLabel)。问题 #2 我是 需要为此设置自定义类为 MyView?我认为不是 这只是一个标准的 UILabel。

如果您希望能够从您的 MyView 访问该 UILabel,您应该在您的 MyView 中创建一个 IBOutlet 并从根 UIView(即您的 MyView 的子类)链接到UILabel。在这种情况下,您不要触摸文件的所有者。

最后检查一下,以便您正确加载自定义视图 => Loading custom UIView from nib, all subviews contained in nib are nil?

【讨论】:

谢谢,这很有帮助,但我有些困惑;你说跳过关于文件所有者的第 4 步,但在你链接到的问题中,他们说 Your custom view's nib file needs to have the 'File's owner' class set to your custom view class and you need to have an outlet in your custom class called 'toplevelSubView' connected to a view in your custom view nib file that is acting as a container for all the subviews. 基于在 IB 工作似乎是正确的。在上面提供的场景中,我需要设置文件所有者吗?我很难实现这一步。再次感谢 理论上,当您创建自定义UITableViewCell 时,它应该以相同的方式工作,在这种情况下,您不设置文件的所有者,而是设置根的UIView thx - 我知道你说的是对的,但我遇到了这个无限循环问题:***.com/questions/15204547/… 这似乎是分开的 你有测试项目,我可以看看吗?

以上是关于使用 IB / Xcode 4.5.1 和 iOS Simulator 6.0 自定义 UIView 操作方法的主要内容,如果未能解决你的问题,请参考以下文章

Mountain Lion 上 xCode 4.5.1 中的 iOS 4 和 iOS 5 SDK

从 IB 添加到表视图的 UIView 被调整大小并且不保持固定大小(XCode 6 | ios 8 | 非 ARC 代码)

Xcode 9 compiling IB documents for earlier than ios 7 is no longer supported

XCode 8 通用应用程序:IB 未显示所有设备分辨率

xcode运行项目报error: Illegal Configuration: Compiling IB documents for earlier than iOS 7

非法配置:不再支持编译早于 iOS 7 的 IB 文档