- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为一个新手,IB 和所有可能的联系让我感到困惑。我发现的大多数教程都是我所说的意大利面条代码的转世,其中的纠缠是通过拖动创建的所有连接。当然,我想使用 IB 进行 View 布局(调整大小和放置视觉元素),这就是 IB 的优势。但 Controller 不是 View ,因此如果我的所有 Controller 都只是代码并且不出现在 IB 中的任何位置,那么就不会那么困惑。我怀疑这会减少意大利面的数量。它还鼓励每次观看一次的警告。为此,问题是,我在哪里可以找到遵循此策略的示例项目?
最佳答案
我没有一组示例项目,但我会给您一些有关如何工作以及何时应在 XIB 文件或代码中创建 Controller 的信息。
如果您的 Controller 是通过用户操作动态创建的,您通常不会在 XIB 文件中实例化它们。相反,您将在代码中实例化它们,就像上面提到的危害一样。完成此操作后,您仍然需要一种机制来将在代码中创建的 Controller 连接到您在 IB 中创建的用户界面元素。
IB 提供的解决此问题的机制是文件所有者。掌握文件的所有者对于“掌握”Interface Builder 至关重要。
文件的所有者不是 XIB 文件“中”的对象,而是 XIB 文件中表示的对象。它是加载 XIB 文件时已经存在的对象的占位符。当 NIB 文件在运行时加载时,它们是使用 NSBundle 方法 -[NSBundle loadNibNamed:ownwer:options:] 加载的。 Owner 参数用于解析 XIB/NIB 文件中文件的所有者占位符对象。当文件在运行时加载时,针对文件所有者建立的所有连接都将根据您作为所有者参数传递给 NSBundle 方法的对象进行解析。在 iPhone 上,您通常不会自己加载 NIB 文件。相反,UIViewController 会为你做这件事。 UIViewController 的 loadView 方法的默认实现可能如下所示:
- (void)loadView {
[[self nibBundle] loadNibNamed:[self nibName] owner:self options:nil];
}
因此,通过将 XIB 文件中的元素连接到文件的所有者,您将把它们连接到 View Controller 。
您的应用程序中将有一些静态的 Controller - 它们将永远存在。导航或选项卡 Controller 及其根项通常在其应用程序的整个生命周期中都处于事件状态。在这种情况下,我会在 MainWindow.xib 文件中设置这些 View Controller 。大多数其他 Controller 将动态创建,并以编程方式响应用户所做的事情。
关于iphone - 如何让 Controller 远离 xib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/908208/
我是一名优秀的程序员,十分优秀!