【发布时间】:2011-10-30 12:52:27
【问题描述】:
我的目标是,在他自己的 XIB 中设计一个子类 UIView(我们称之为 infoView),以便我可以在许多 UIViewController 中呈现它。
问题:
到目前为止,当我将UIView 添加到UIViewController 时,我总是必须创建UIViewController 文件的所有者UIView 的.xib 文件来加载视图,如下所示:
...
//this is inside the calling UIViewController's method
// InfoView *infoView is ivar and a subclass of UIView
infoView = nil;
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"InfoView"
owner:self options:nil];
for (id object in bundle) {
if ([object isKindOfClass:[InfoView class]])
infoView = (InfoView *)object;
}
[[self view] addSubview:infoView];
...
但我想在许多不同的UIViewController 中使用相同的UIView,所以我实际上不想要文件的所有者,除了类本身。在ThomasM's question 中,他将UIView 本身设置为文件的所有者,但没有成功。
在答案中,我找到了将文件所有者设置为 nil 的解决方案。为此,我必须将 Interface Builder 对象库中的所有调用 UIViewController 对象添加到 InfoView.xib 文件中,并将它们与它们的 infoView 出口连接。
但这感觉不对。 所以在这里我想收集解决方案
将UIView 与他的 xib 文件一起封装,以便在许多不同的视图控制器中使用它。你们是怎么处理的?
感谢任何帮助。
编辑:
infoView 类似于一个叠加层,当用户按下其中一个视图控制器上的按钮时会出现。它不是视图控制器的“主”视图。它提供了有关他的 superviews 视图控制器的视图的详细信息,之后会消失。我只用不同的内容填充infoView 抛出所有调用视图控制器。
【问题讨论】:
-
您可能对我对“带有 xib 的可重用 UIView 小部件”问题的解决方案感兴趣,如我对此问题的回答中所述:stackoverflow.com/questions/5056219/…
-
@Bogatyr thx,这是一个很好的答案。
标签: iphone ios uiview uiviewcontroller interface-builder