为UIView创建自定义init方法以添加UILabel

斯图尔特

目前,我有一个自定义UIView类,该类可完成以下操作:

- (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方法以创建标签,但是仍然以相同的方式调用它,以便使用类别,并且我得到了自动布局信息也被调用。

编辑2
真正有用的是,如果我可以传递一个参数来确定,是否UIView应该有一个UILabel因此,如果视图应具有标签,则可以调用自定义init方法。我知道创建和添加标签/约束的代码,只是不确定在子类/类别链接和创建自定义init方法上。以及如何与autoLayoutView通话一起调用?

埃里克

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

由于它是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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章