Iphone 从多个不同的UIViewController从NIB文件加载视图
我已经成功地使用了在本文中找到的方法从Nib文件加载视图 问题是,因为我们必须设置文件所有者,所以此nib文件将“附加”到此视图控制器。这个视图是Iphone 从多个不同的UIViewController从NIB文件加载视图,iphone,uiviewcontroller,ios,nsbundle,Iphone,Uiviewcontroller,Ios,Nsbundle,我已经成功地使用了在本文中找到的方法从Nib文件加载视图 问题是,因为我们必须设置文件所有者,所以此nib文件将“附加”到此视图控制器。这个视图是UITableViewCell的子类,我想从几个不同的vc加载这个nib文件。 谢谢您的帮助。笔尖只是一个模板,您可以反复加载它 如果使用iOS4,您可能需要查看UINib,它为重复加载nib提供了更好的性能。学究式地说,nib应该有一个控制器。我可能要做的是创建一个新的UIViewController子类来控制您的nib中的内容,然后每当您需要nib
UITableViewCell
的子类,我想从几个不同的vc加载这个nib文件。
谢谢您的帮助。笔尖只是一个模板,您可以反复加载它
如果使用iOS4,您可能需要查看UINib,它为重复加载nib提供了更好的性能。学究式地说,nib应该有一个控制器。我可能要做的是创建一个新的
UIViewController
子类来控制您的nib中的内容,然后每当您需要nib中的内容时,创建一个视图控制器并请求它提供内容,而不是直接加载nib。我将提供两个选项:
- 使用单个
和一个名为@属性(非原子,保留)IBOutlet id main对象创建一个类NibLoader
)的方法。然后,doloadNibNamed:bundle:
MyView*v=[[NibLoader loadNibNamed:“MyView”bundle:nil]main对象]代码>。(GCC4.0属性访问错误意味着[…].mainObject将调用[…]两次;它在4.2中已修复。)
- 创建具有
,并将文件的所有者类更改为@属性(非原子,保留)IBOutlet MyView*MyView的
@协议MyNibOwner
或id
NSObject
UIView*v=[[vc.view-retain]自动释放];vc.view=nil;返回v代码>或者事情会表现得很奇怪(我忘记了错误是什么或者是哪个操作系统版本)。或者UIViewController
,但这会阻止视图在init中将nib作为子视图加载。第二种解决方案听起来很完美,但IB不接受id之后的协议。将其设置为id并保持“断开”引用工作正常,但我认为它不是很安全。这很奇怪,因为IBOutlet id delegate
工作得非常好(但在这种情况下,它可能只是忽略了协议;这不会让我感到惊讶)。你可以添加一个虚拟的@interface MyNibOwnerHack:NSObject
,以获得InterfaceBuilder的好处。无耻的插件:我刚刚在@PauloCasaretto上发布了一个对我非常有用的方法:你可能不想做[self-viewWithTag:0]
,因为IIRC 0是默认标记。在重用标记ID时,还需要稍微小心。
[[NSBundle mainBundle] loadNibNamed:@"YourNibName" owner:self options:nil];