使用来自多个视图控制器的自定义UIView

BP.*_*BP. 4 iphone cocoa-touch

我创建了一个自定义UIView,我想在我的iPhone应用程序中的多个不同视图控制器上使用它.目前,我已经复制了包含第一个视图控制器的nib文件中的控件的UIView,将其粘贴到其他视图控制器中,然后将所有操作连接到每个视图控制器.这工作正常,但不是我想使用此自定义视图的最佳方式.

我的自定义视图相当简单,它由一些带标签的UIButtons组成,点击这些按钮可触发更改视图控制器视图上控件内容的操作.

什么是巩固这个UIView的定义和用法的策略?理想情况下,我想从视图控制器的nib中引用此自定义视图,并让我的视图控制器响应此自定义视图中的操作.

编辑:好的,基于J.Biard的建议,我尝试了以下运气并没有太多运气.

我创建了另一个基于UIView的nib文件,其中包含我的可重用视图和UIView子类.m和.h文件的内容(现在只是一些UIButton对象),然后将nib文件的Owner类设置为我新创建的类名.

然后,我添加了来自J.Biard的大部分代码(我将rect更改为50,50,100,100,暂时将setDelegate排除在外,因为我现在只是想让它在视觉上工作,我发现[自我.查看addSubview:view]比[self addSubView:view]更好地工作到应用程序启动时显示的第一个视图控制器的viewDidLoad方法的末尾.

我现在得到的是我的主视图,其中有一个黑色方块.我在某个地方错过了一个插座,还是在UIView子类中的initWithFrame或drawRect中需要初始化?

ban*_*isa 5

创建MyCustomView类和nib文件.

在nib文件中,将Files Owner设置为MyCustomView - 然后正常设计您的视图,使用顶级UIView.在MyCustomView中创建一个IBOutlet,以链接到您的nib文件中的顶级UIView.

在MyCustomView中添加此方法:

- (BOOL) loadMyNibFile {
if (![[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil]) {
    return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)

在视图控制器中,您可以像这样使用此自定义视图

- (void)viewDidLoad {

MyCustomView *customView = [[MyCustomView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[customView loadMyNibFile];
[self.view addSubview:customView.view]; //customView.view is the IBOutlet you created
    [customView release];

}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,还可以在MyCustomView上创建一个便捷类方法来执行此操作.