目前,我有一个自定义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] 删除。
我来说两句