我创建了一个自定义 UIView,我想在 iPhone 应用程序中的多个不同视图控制器上使用它。目前,我已从第一个视图控制器的 nib 文件中复制了包含控件的 UIView,将其粘贴到其他视图控制器中,然后将所有操作连接到每个视图控制器。这工作正常,但不是我想要使用此自定义视图的最佳方式。
我的自定义视图相当简单,它由一些带有标签的 UIButton 组成,点击这些按钮会触发更改视图控制器视图上控件内容的操作。
巩固此 UIView 的定义和用法的策略是什么?理想情况下,我只想从视图控制器的笔尖引用此自定义视图,并让我的视图控制器响应此自定义视图中的操作。
编辑:好的,根据 J.Biard 的建议,我尝试了以下方法,但运气不佳。
我创建了另一个基于 UIView 的 nib 文件,其中包含可重用视图和 UIView 子类 .m 和 .h 文件的内容(现在只是一些 UIButton 对象),然后将 nib 文件的所有者类设置为我新创建的类名。
然后,我添加了 J.Biard 的大部分代码(我将 rect 更改为 50,50,100,100,暂时忽略了 setDelegate,因为我现在只是想让它在视觉上工作,我发现 [self. view addSubview:view] 比 [self addSubView:view]) 工作得更好,直到应用程序启动时显示的第一个视图控制器的 viewDidLoad 方法结束。
我现在得到的是我的主视图,里面有一个黑色方块。我是否错过了某个地方的出口,或者 UIView 子类中的 initWithFrame 或 drawRect 中是否需要一些初始化?
创建 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;
}
在您的视图控制器中,您可以像这样使用这个自定义视图
- (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];
}
如果您愿意,还可以在 MyCustomView 上创建一个便利的类方法来执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)