创建自定义的init方法的UIView添加一个UILabel

问题描述:

目前,我有一个自定义的UIView类,完成了以下内容:创建自定义的init方法的UIView添加一个UILabel

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     [self setupView]; 
    } 
    return self; 
} 
-(void)setupView { 
    self.layer.cornerRadius = 4; 
    self.layer.masksToBounds= YES; 
    self.backgroundColor = [UIColor whiteColor]; 
    self.layer.borderWidth = 1; 
    self.layer.borderColor = [UIColor lightGrayColor].CGColor; 
} 

我也有,创建一个新的UIView,并使得它如此另一个UIView的类别我可以使用以下自动布局:

@implementation UIView (Autolayout) 
+(id)autolayoutView 
{ 
    UIView *view = [self new]; 
    view.translatesAutoresizingMaskIntoConstraints = NO; 
    return view; 
} 

两者都相当简单。我现在想要做的是为UIView创建一个自定义的init方法。

问题
我想自定义init()方法被用来创建一个UILabel和它UIView的。但是,我希望init方法使用我已创建的UIView类别?我相信这是相当简单的,只是不知道如何完成这一点?

编辑
目前创建一个自定义自动版式视图我打电话UIView *myView = [MyCustomViewClass autoLayoutView]
我想要做的就是更新自定义视图类init方法来创建标签,但仍然有它以同样的方式被称为以便正在使用该类别,并且我也会调用自动布局信息。

EDIT 2
将是非常有用的是什么,如果我能在一个参数传递,以确定是否UIView应该有一个UILabel。因此,如果视图应该有标签,可以调用一个自定义的init方法。我知道创建和添加标签/约束的代码我只是不确定在子类/分类链接和创建自定义的init方法。以及如何与autoLayoutView呼叫一起调用?

+0

有点不清楚,你想添加标签从类别或init方法吗?你想调用UIView类或从另一个控制器或类似的类别? – Eric

+0

@Eric - 我已经添加了一个编辑,希望能够澄清我尝试实现的内容。我相信它很简单,但我想完全理解这种方法。 – StuartM

+0

还添加了进一步的编辑,以解释我在这里理解和困惑的困难。谢谢 – StuartM

这种方法的问题在于,您在通用UIView上使用类别来创建带有UIView *myView = [MyCustomViewClass autoLayoutView]的UIView。

由于它是一个UIView,而不是您所做的自定义子类,因此它不会引用您所做的任何自定义init方法。所以一个解决方案将是...为什么不把所有的定制添加到类别中?

+(id)autolayoutViewWithCustomization:(BOOL)customize addLabel:(BOOL)addLabel 
{ 
    UIView *view = [self new]; 
    view.translatesAutoresizingMaskIntoConstraints = NO; 

    if (customize) { 
     view.layer.cornerRadius = 4; 
     view.layer.masksToBounds= YES; 
     view.backgroundColor = [UIColor whiteColor]; 
     view.layer.borderWidth = 1; 
     view.layer.borderColor = [UIColor lightGrayColor].CGColor; 
    } 

    if (addLabel) { 
     // Create a label here 
     [self addSubview:label]; 
    } 

    return view; 
} 

如果什么,我从你的问题得到的是正确的,那么这是你想要做什么:

只使用您有已经创建init方法,更增添了其上。

+(id)autolayoutViewWithAddedLabel:(BOOL)addedLabel 
{ 
    UIView *view = [self new]; 
    view.translatesAutoresizingMaskIntoConstraints = NO; 

    if(addedLabel) { 
     // do your label stuff here 
     [self addSubview://label]; 
    } 
    return view; 
} 

然后如果你想调用这个方法,你可以做,就像你曾经说

MyClass *mc = [MyClass autolayoutViewWithAddedLabel:YES]; 

与你的问题的方法来完成,并且将添加标签到您的自定义视图

希望有帮助!