自定义UIViewController和自定义UIView

时间:2011-04-10 14:34:32

标签: ios uiview uiviewcontroller

我有三个观点有几个相似之处。例如,位置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 :(

2 个答案:

答案 0 :(得分:0)

在笔尖中创建视图时,我没有看到复制和粘贴的必要性?它肯定消除了为每个代码定位视图的必要性。而且除了评论之外:通常情况下,“最差”的sdks是我们不太了解的那些。

如果他们需要一套共同的内务管理代码,那么就会将一个视图作为一个参数并在不违反DRY原则的情况下进行操作(不要重复自己)

答案 1 :(得分:0)

  

当我使用a创建所有三个视图时   笔尖我必须复制并粘贴相同的   份...

你是否意识到,像一个视图控制器这样的对象加载多个笔尖是可能的 - 简单,甚至是简单的?所有三个视图控制器都可以从同一个nib文件加载接口的公共部分,并从自己的nib文件加载自己的接口。一种方法是将公共接口的插座放在一个类中,以及管理公共接口所需的任何代码(设置,操作等)。然后,您可以为每个不同的视图控制器创建该类的子类,并让每个子类加载自己的nib。最后一步是将子类中的接口插入到超类的视图层次结构中,或者将超类中的接口插入到子类的视图层次结构中,无论哪种情况都适用于您的情况。