iphone - 需要帮助了解如何以编程方式添加 IB 创建的 UIView

标签 iphone objective-c cocoa-touch uikit interface-builder

我的一个 ViewController 有很多特殊情况,我需要一种优雅的方式来处理它们。一般的想法是,我的 View 的下半部分在每种情况下都是相同的。每种情况的上半部分都会发生变化。

根据 DRY,我想避免为每种特殊情况制作我的 ViewController 的副本,并在需要进行更改时更改每个 ViewController 底部的按钮。通常,我创建一个 .xib,在 IB 中构建我的 UI,然后建立连接。我在屏幕的下半部分做了这个,效果很好。

对于屏幕的上半部分,我分别创建了单独的 UIView 实例。我希望在 ViewController 出现之前动态加载它们(文档告诉我使用 layoutSubviews、layoutIfNeeded 和 setNeedsLayout)。

此设计存在的问题是我习惯于在 IB 中使用我定义为 IBOutlets 的变量进行连接。我遵循在头文件中制作变量属性的模式,使它们成为属性并在 .m 文件中使用“合成”。我也习惯于将 UITextFields 的委托(delegate)设置为文件的所有者,这样我就可以在键盘上放弃他们的第一响应者状态。

如果 Interface Builder 只允许我访问给定 View 中的文件所有者和 IBOutlets,我如何在动态添加它的 super View 中访问这些属性?这里的正确设计是什么?

提前致谢!

最佳答案

看起来添加顶 View 是您的 View Controller 的工作。我会在发送 [super loadView] 后在 Controller 的 -loadView 中执行此操作。有两种方法可以在运行时将它们连接在一起。

  1. 全部以编程方式完成,包括分配 subview 、设置委托(delegate)等。
  2. 在同一个 nib 中创建所有顶 View ,根据需要连接它们,并为每个顶 View 添加一个导出到您的 View Controller 。不要将任何顶级 View 放入 IB 的主视图中。这样,当 Controller 加载 nib 时,它会加载所有顶级 View 并正常工作,只需将正确的 View 作为其主视图的 subview 安装即可。

您更喜欢哪种方法取决于您必须处理多少顶层 View 、在代码中设置它们与在 IB 中设置它们的难度以及您的应用程序加载具有这么多 View 的大型 nib 需要多长时间。

关于iphone - 需要帮助了解如何以编程方式添加 IB 创建的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2070270/

相关文章:

iphone - 限制 NSFetchedResultsController 结果,并获得更多

iphone - 无法释放我的 appDelegate 变量

objective-c - 在没有新初始化的情况下使用类中的数据

iphone - 如何在 xcode4.3 中获取和修改显示屏幕大小

iphone - 如何在方向更改时禁用 MobileSafari 的内容缩放?

iphone - 按照本地格式显示日期

ios - UIImage imageNamed : always returns image at 1x

objective-c - 浮点工作正常......大多数时候

iphone - 继续添加到 NSMutableArray

iphone - 模拟相机应用程序 'tap to focus'