objective-c - 覆盖 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;
}
解决方案
情节提要不使用init
. 它们使用 初始化initWithCoder:
,因此如果您想从 Storyboard 进行自定义,那么这就是您需要实现的。
这些方面的东西:
- (instancetype) initWithCoder: (NSCoder *)coder {
self = [super initWithCoder: coder];
[self setupButton];
return self;
}
推荐阅读
- angular - 愚蠢的 UI 组件:如何在输出发出后应用条件行为
- angularjs - 如果数组中的对象缺少字段,如何隐藏元素
- python - 排序后如何获取数据帧的索引
- sql - 我想将数字更改为小时:分钟
- ajax - 字段中的值不会通过 ajax 传递给 php
- c# - UTC 到夏令时的本地时间
- c++ - std::vector without exceptions:警告 C4530:使用了 C++ 异常处理程序,但未启用展开语义。指定 /EHsc
- sql-server - 从 XML 读取数据时出现 SQL 查询错误
- azure - 无法在 azure java sdk 中刷新多个资源的令牌
- c# - .NET 音频流可以按 L/R 通道拆分吗?