iphone - 最佳实践 : Presenting a Subclassed UIView (with own xib) as subview of UIViewControllers

标签 iphone ios uiview uiviewcontroller interface-builder

我的目标是,在他自己的 XIB 中设计一个子类 UIView(我们称它为 infoView),这样我就可以在许多 UIViewController< 中展示它 的。

问题: 到目前为止,当我将 UIView 添加到 UIViewController 时,我总是必须将 UIViewController 作为 UIView 的文件所有者 的 .xib 文件加载 View ,内容如下:

...
//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 socket 连接。

但这感觉不对。 所以在这里我想收集解决方案
UIView 与他的 xib 文件封装在一起,以便在许多不同的 View Controller 中使用它。你们是怎么处理的?

感谢您的帮助。

编辑:

infoView 类似于一个叠加层,当用户按下其中一个 View Controller 上的按钮时会出现。它不是 View Controller 的“主” View 。它提供了关于他的 superviews View Controller 的 View 的详细信息,然后会消失。我只用不同的内容填充 infoView 并丢弃了所有调用 View Controller 。

最佳答案

喜欢霍兰斯 answer指出我正在使用 UINib

要使用它,请保留 .xib 文件所有者 nil 并将 infoView 的所有自定义放置在您的 InfoView 类实现的 initWithCoder: 方法中。如果您获取 InfoView.xib 将被调用,例如:

// here InfoView is the name of the .xib file
UINib *infoNib = [UINib nibWithNibName:@"InfoView" bundle:nil];

NSArray *topLevelObjects = [infoNib instantiateWithOwner:self options:nil];

QInfoView *infoView = [topLevelObjects objectAtIndex:0];

关于iphone - 最佳实践 : Presenting a Subclassed UIView (with own xib) as subview of UIViewControllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7120537/

相关文章:

ios - 更容易修改 UIView 框架?

ios - UIView touchesEnded 事件在第一次点击时不调用,但在再次点击时调用

ios - Swift - 覆盖编辑按钮功能

ios - swift 发送没有消息 Composer 的消息

iphone - 图像映射不适用于 iOS 设备,大图像会被设备重新缩放

iphone - iOS - 处理数据模型更改的正确方法是什么?

iphone - 在另一个 UIViewController 之上添加 UIViewController 的最佳方法

ios - 在 touchesMoved 期间取消触摸事件

iphone - 从 NSMutableArray 中删除特定键的项目

iphone 延迟来自服务器的响应