自定义 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 中的“视图”属性?

为啥我的 UIViewController 被加载了两次? IOS 7

自定义容器和自定义转换

Wordpress 自定义帖子类型和自定义分类

XAML和自定义类