Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从多个不同的UIViewController从NIB文件加载视图_Iphone_Uiviewcontroller_Ios_Nsbundle - Fatal编程技术网

Iphone 从多个不同的UIViewController从NIB文件加载视图

Iphone 从多个不同的UIViewController从NIB文件加载视图,iphone,uiviewcontroller,ios,nsbundle,Iphone,Uiviewcontroller,Ios,Nsbundle,我已经成功地使用了在本文中找到的方法从Nib文件加载视图 问题是,因为我们必须设置文件所有者,所以此nib文件将“附加”到此视图控制器。这个视图是UITableViewCell的子类,我想从几个不同的vc加载这个nib文件。 谢谢您的帮助。笔尖只是一个模板,您可以反复加载它 如果使用iOS4,您可能需要查看UINib,它为重复加载nib提供了更好的性能。学究式地说,nib应该有一个控制器。我可能要做的是创建一个新的UIViewController子类来控制您的nib中的内容,然后每当您需要nib

我已经成功地使用了在本文中找到的方法从Nib文件加载视图

问题是,因为我们必须设置文件所有者,所以此nib文件将“附加”到此视图控制器。这个视图是
UITableViewCell
的子类,我想从几个不同的vc加载这个nib文件。 谢谢您的帮助。

笔尖只是一个模板,您可以反复加载它


如果使用iOS4,您可能需要查看UINib,它为重复加载nib提供了更好的性能。

学究式地说,nib应该有一个控制器。我可能要做的是创建一个新的
UIViewController
子类来控制您的nib中的内容,然后每当您需要nib中的内容时,创建一个视图控制器并请求它提供内容,而不是直接加载nib。

我将提供两个选项:

  • 使用单个
    @属性(非原子,保留)IBOutlet id main对象创建一个类NibLoader
    和一个名为
    loadNibNamed:bundle:
    )的方法。然后,do
    MyView*v=[[NibLoader loadNibNamed:“MyView”bundle:nil]main对象]。(GCC4.0属性访问错误意味着[…].mainObject将调用[…]两次;它在4.2中已修复。)
  • 创建具有
    @属性(非原子,保留)IBOutlet MyView*MyView的
    @协议MyNibOwner
    ,并将文件的所有者类更改为
    id
    NSObject

Ugh,不。在视图控制器中嵌入视图控制器很讨厌,如果您只是想要视图,则需要执行
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];