创建自定义的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
呼叫一起调用?
这种方法的问题在于,您在通用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];
与你的问题的方法来完成,并且将添加标签到您的自定义视图
希望有帮助!
有点不清楚,你想添加标签从类别或init方法吗?你想调用UIView类或从另一个控制器或类似的类别? – Eric
@Eric - 我已经添加了一个编辑,希望能够澄清我尝试实现的内容。我相信它很简单,但我想完全理解这种方法。 – StuartM
还添加了进一步的编辑,以解释我在这里理解和困惑的困难。谢谢 – StuartM