为 UIView 创建自定义初始化方法以添加 UILabel
Posted
技术标签:
【中文标题】为 UIView 创建自定义初始化方法以添加 UILabel【英文标题】:Creating custom init method for UIView to add a UILabel 【发布时间】:2014-01-10 23:52:26 【问题描述】:目前我有一个自定义 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 方法。我知道创建和添加标签/约束的代码我只是不确定子类/类别链接和创建自定义初始化方法。以及如何与autoLayoutView
调用一起调用?
【问题讨论】:
有点不清楚,您是想从类别中添加标签还是从 init 方法添加标签?你是想从 UIView 类中还是从另一个 Controller 或其他东西中调用类别? @Eric - 我添加了一个编辑,希望能阐明我想要实现的目标。我确信它很简单,但我想完全理解这种方法。 还添加了进一步的编辑来解释我在这里的理解困难和困惑。谢谢 【参考方案1】:这种方法的问题是您使用通用 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;
【讨论】:
【参考方案2】:如果我从您的问题中得到的信息是正确的,那么这就是您想要做的:
只需使用您已经创建的 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];
这会将标签添加到您的自定义视图中
希望有帮助!
【讨论】:
以上是关于为 UIView 创建自定义初始化方法以添加 UILabel的主要内容,如果未能解决你的问题,请参考以下文章