自定义 UIViewController 和自定义 UIView
Posted
技术标签:
【中文标题】自定义 UIViewController 和自定义 UIView【英文标题】:Custom UIViewController and custom UIView 【发布时间】:2011-04-10 14:34:32 【问题描述】:我有三个观点,它们有几个相似之处。例如位置 30,30 的 UIImageView 和同一位置的三个 UILabel。
在不复制和粘贴或冗余代码的情况下解决此问题的最佳方法是什么?
当我用笔尖创建所有三个视图时,我必须复制并粘贴相同的部分...
我开始实现我自己的 UIViewController 和一个基本的 UIView。我的代码如下所示:
- (id)init
if((self = [super init]))
image = [[UIImageView alloc] init];
header = [[UILabel alloc] init];
[self addSubview:image];
[self addSubview:header];
return self;
- (void)layoutSubviews
[super layoutSubviews];
image.frame = CGRectMake(30, 30, 20, 20);
header.frame = CGRectMake(30, 100, 200, 30);
当我将带有该视图的控制器推送到堆栈上时,视图显示错误。图片和标签被titleheader(navigationcontroller)覆盖...
谁能解释一下这个布局系统是如何工作的... ios sdk 是我用过的最糟糕的 sdk :(
【问题讨论】:
Cocoa 和 CocoaTouch 工作得很好。只是不要忽略文档。 ;-) 【参考方案1】:在 nib 中创建视图时,我没有看到复制和粘贴的必要性?它绝对消除了为每个代码定位视图的必要性。顺便说一句:通常“最差”的 sdk 是我们不太了解的。
如果他们需要一套通用的内务管理代码,请考虑一个方法,该方法将视图作为参数并在不违反 DRY 原则的情况下执行此操作(不要重复自己)
【讨论】:
【参考方案2】:当我创建所有三个视图时 笔尖我必须复制和粘贴相同的 零件...
您是否意识到让一个像视图控制器这样的对象加载多个 nib 是可能的——很简单,甚至是——?您的所有三个视图控制器都可以从同一个 nib 文件加载接口的公共部分,也可以从它们自己的 nib 文件加载它们自己的接口。一种方法是将通用接口的出口与管理通用接口所需的任何代码(设置、操作等)放在一个类中。然后,您可以为每个不同的视图控制器创建该类的子类,并让每个子类加载自己的 nib。最后一步是将子类中的接口插入到超类的视图层次结构中,或者将超类中的接口插入到子类的视图层次结构中,这取决于您的情况。
【讨论】:
以上是关于自定义 UIViewController 和自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章
如何将自定义单元格连接到 UIViewController?
如何覆盖 UIViewController 中的“视图”属性?