首页 > 解决方案 > 覆盖 UIButton 类的默认构造函数的问题?

问题描述

当一个对象被放置在一个视图控制器上时,它会被初始化。我想知道您是否可以将 UIButton 放置在 Storyboard 上,并使用作为 UIButton 类的子类的自定义类,并让它使用自定义属性自动初始化并运行一些自定义方法 - 如自定义类中定义的那样- 不必键入修改视图控制器类中的属性的方法。

实际上,我试图通过让自定义按钮像任何普通 UIButton 一样自动构建自身来节省 View Controller 类中的空间,但同时使用自定义属性和方法。

我不确定如何解决我的问题,我基本上想让 setupButton 方法在重写的构造函数中运行。

@implementation TransitionButton

@synthesize borderRadius, borderWidth, borderColor, highlightColor;

- (void)setupButton
{
    borderRadius = 5;
    borderWidth = 2;
    borderColor = [TransitionButton customRedColor];
    highlightColor = [UIColor redColor];

    [self addBorder];
    [self setupEventEffects];
}

- (void)setupEventEffects
{
    [self addTarget:self action:@selector(highlight) forControlEvents:UIControlEventTouchDown];
    [self addTarget:self action:@selector(unhighlight) forControlEvents:UIControlEventTouchUpInside];
    [self addTarget:self action:@selector(unhighlight) forControlEvents:UIControlEventTouchDragExit];
}

- (void)addBorder
{
    self.layer.borderColor = borderColor.CGColor;
    self.layer.cornerRadius = borderRadius;
    self.layer.borderWidth = borderWidth;
}

- (void)highlight
{
    self.layer.borderColor = highlightColor.CGColor;
    self.titleLabel.textColor = highlightColor;
}

- (void)unhighlight
{
    self.layer.borderColor = borderColor.CGColor;
    self.titleLabel.textColor = borderColor;
}

标签: objective-cclassuibuttonsubclass

解决方案


情节提要不使用init. 它们使用 初始化initWithCoder:,因此如果您想从 Storyboard 进行自定义,那么这就是您需要实现的。

这些方面的东西:

- (instancetype) initWithCoder: (NSCoder *)coder {
    self = [super initWithCoder: coder];
    [self setupButton];
    return self;
}

推荐阅读