- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在提出一个新问题来跟进我的上一个问题 ( superview and parentviewcontroller nil after adding a subview )。基本上我知道使用 subview 是一个好主意,但是我不应该让 ViewController 控制位于另一个 ViewController 内的 subview 。基本上我想做以下事情......我有两个 ViewController,它们共享一个公共(public) subview 。我已将该 subview 创建为名为 SearchDate.xib 的 Nib 。文件所有者是对应的类SearchDateView.m/h。该类有一个用于 Nib 中 UIView 内唯一元素的导出,即标签。 SearchDateView 类还有一个用于更改 SearchDateView.xib 中标签值的函数。我希望我的两个 ViewController 都加载这个 Nib ,但显然我不知道如何正确加载 Nib 。无论我做什么,最好的情况是没有任何显示,最坏的情况是抛出异常。苹果文档讨论了将 IB 中类的其他实例直接拖到主视图中,但这似乎不起作用。我的 ViewController 中有一个 SearchDateView 导出,我尝试在 Controller 的加载 View 上执行此操作:
searchDateView = [[[NSBundle mainBundle] loadNibNamed:@"SearchDateView" owner:self options:nil] objectAtIndex:0];
[[self view] addSubview:searchDateView];
但是我得到了这个异常:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MainViewController 0x431fac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key searchDateLabel.'
我知道我做的事情完全错误,但是拥有一个 Nib 、关联的 View 类(更新该 Nib 中的一些对象)并在不同的 Controller 中重用该 Nib 的正确方法是什么?
编辑:考虑到评论,这可能还不够清楚。我不想对整个 View 使用相同的 nib 文件,而是对 subview 使用相同的 nib 文件。例如, Controller A 有一个 map 和一个 SearchDateView, Controller B 有一个 TableView 和一个 SearchDateView。所以我想知道如何将 subview 加载到多个 Controller 中......
最佳答案
当使用 initWithNibName:bundle: 初始化每个 Controller 时,对多个 Controller 使用相同的 NIB 文件应该没有问题。不过,您通常不会从 Controller 内加载 Controller 自己的 nib 文件。
如果您使用 loadNibNamed:::加载 nib 文件,那么您将获得一个 NSArray,其中包含其中定义的对象,因此您不能直接将其用作 View 。获取 View 的一种方法是使用 for() 或其他方法搜索数组以找到所需的对象,但如果设置owner:self,那么它应该连接到与 self 中的文件所有者相连的 socket ,因为文件所有者将是 self 。但在这种情况下你可以丢弃返回值;您不需要返回的数组。如果您连接了该 socket ,这可能是您的主要问题(用阵列破坏 socket )。
可以使用 loadNibNamed 加载特定的 View 对象(假设您从返回的数组中选择它),然后以某种方式显示它,但通常在 Controller 上使用 initWithNibName 更容易(在这种情况下,文件的所有者将是 Controller )。
哦,您还可以在 Interface Builder 中设置 Controller 的 nib 文件。对多个 Controller 使用相同的 nib 应该不会有问题,因为本质上您只需告诉 Interface Builder 设置 nib 文件来执行 initWithNibNamed 之类的操作。单击 Controller 对象并检查检查器窗口。
更新
我可能会这样做,以便在多个 Controller 中仅使用一个 View :
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FooView"
owner:self options:nil];
for (id obj in nib)
if ([obj isKindOfClass:[FooView class]])
myNewView = (FooView *)obj;
(摘自第 8 章:开始 iPhone 3 开发示例代码中的 Cells 2。)
您可以使用 IB 中的导出来执行此操作,在这种情况下,您可以省略 for 循环,但您可能需要为声明导出的两个 Controller 提供一个父类(super class),并告诉 Interface Builder 文件所有者是一个实例该父类(super class)的所以它知道导出。可能不值得这么麻烦。
关于iphone - 如何创建一个具有可由多个 ViewController 使用的关联 View 类的 Nib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066539/
我正在尝试在手写笔中使用 Nib CSS3 扩展。安装了手写笔和 Nib (尝试了本地和全局 -g)。但没有一个工作,当我做 stylus styles.styl > build/styles.css
我们当前的best-practice for custom views是: 在 Nib 中构建自定义 View 。 在 View Controller 中,以编程方式加载 Nib,从加载的对象数组中获
我是界面构建器的新手,我想要一个包含 UIView 的 3x3 网格的屏幕,每个网格都包含一个 UIImageView 和 4 个 UILabels。 我的逻辑可能有缺陷,但我试图实现这一目标的方式是
我有一个用 Swift 编写的框架/模块,它提供了一些具有 IBDesignable 功能的自定义控件。 目前我正在开发一个基于 CollectionView 的控件。 CollectionView
我有两个 nib 文件 - Main.nib 和 Preference.nib在 Main.nib 文件中,我有一个 NSView 类的实例。它的窗口有一个NSPopUpButton,单击它会显示一个
我想创建一个节标题来加载一个 nib 文件并将其设置为标题 UIView。这个 nib 文件还将有一个关联的类,其中连接了 outlets 和 action,所以我想像平常一样用 nib 加载那个类。
我正在尝试使用来自 this pre-built page menu pod from github 在说明中,它说: var controller : UIViewController =
我是 Cocoa 新手,无法将我的 nib 文件拆分为多个 nib 文件。 我的MainMenu.nib包含一个Tracker Controller对象,它是NSObject的子类。它在我的主菜单中有
我通过 XIB 创建了 CustomViewController。 我还通过作为 UIView 子类的不同 XIB 文件创建了 CustomView。 然后我将 UIView 绑定(bind)到 Cu
我正在使用自定义 UITableViewCell。当我尝试运行我的代码时,我得到了这个异常堆栈,我无法理解问题的根源: terminating app due to uncaught exceptio
我有两个 Nib ParentViewController.xib ChildViewController.xib ParentViewController.xib 包含一个 UIView 和一个 U
我一开始使用了一些 NSWindows 项目,但我的 GUI 正在不断发展,这些元素将更适合作为 NSViews。有没有办法将 NSWindow NIB 转换为 NSView NIB? 最佳答案 不存
我想要具有正确顺序的 View Controller 生命周期功能的完整列表。请任何天才。 请指定ViewController生命周期函数. 请指定序列号,例如用法:,并且仅使用简短描述。示例: 与使
我有两个 Nib :Parent.xib 和 Child.xib。 我已将子 Nib 包含在父 Nib 内以简化绑定(bind)。我在 loadView 中以编程方式设置 subview 。问题是,a
我正在开发一款通用应用程序,iPhone 版本运行良好。我为 iPad 创建了一个新的 nib,并将文件所有者设置为 viewcontroller 类。我连接了所有的 IBOutlets 和 IBAc
我有两个 UIViews,我将它们称为 A 和 B。 A 是B 的容器,每一个都是使用Interface Builder 创建的。 我需要使用界面生成器将我的 B View 添加到 A 中,如下图所示
谁能解释什么时候对同一个 NIB 文件使用多个 View 比使用多个 NIB 文件更好? 一个 NIB 文件可以包含多个 View ,因此有时使用一种方法比使用另一种方法更好。 我是不是太含糊了? 最
简单的任务:我有一个带有 2 个 NIB 文件的应用程序(每个 NIB 文件都有自己的 Controller )。我已经成功地显示了第二个 NIB 文件的窗口,就像我想要的那样,但现在,我想单击 NI
目前,我有一个托管上下文、许多相互关联的实体 NSArrayController,以及几个 Windows,每个 Windows 都使用 1 或 2 个 NSArrayController。 Wind
尝试创建一个 tableView 单元格 xib,但遇到错误“加载了 nib 但未设置 View 导出” 我读过很多帖子,大多数人都说将“ View ”从文件所有者拖到 IB View 。 但是,如果
我是一名优秀的程序员,十分优秀!