自定义UIButton类重用

时间:2015-05-30 17:56:54

标签: ios uibutton

现在已经在网上找了一段时间,并且没有得到关于如何做到这一点的直接答案。

在我的应用中,我需要一个"下一个"驻留在许多ViewControllers上的按钮。我希望下一个按钮是相同的(有边框,相同的背景颜色,相同的自定义字体,相同的字体大小,相同的按钮大小)。

//Next Button Properties
[self.nextButtonOutlet setFrame:CGRectMake(120, 454, 80, 30)];
[[self.nextButtonOutlet layer] setBorderWidth:2.0f];
[[self.nextButtonOutlet layer] setBorderColor:UIColorFromRGB(0xbbffd6).CGColor];
self.nextButtonOutlet.titleLabel.font = [UIFont fontWithName:@"GothamRnd-Light" size:22.0];
[self.nextButtonOutlet setTitle:@"next" forState:UIControlStateNormal];
[self.nextButtonOutlet setBackgroundColor:UIColorFromRGB(0x72CE97)];
[self.nextButtonOutlet setTitleColor:UIColorFromRGB(0xbbffd6) forState:UIControlStateNormal];

在每个视图控制器中编写所有代码似乎很愚蠢。

任何人都有解决方案吗?

3 个答案:

答案 0 :(得分:2)

您可以为UIButton创建扩展,并添加一个返回自定义UIButton的新方法。

在objective-c:

+ (UIButton *)nextButton {
    // Create and return your button here
}

或在Swift中:

extension UIButton {
    class func nextButton() -> UIButton {
        // Create and return your button here

     return nextButton()
    }
}

然后使用:

创建它
UIButton.nextButton()

答案 1 :(得分:0)

有一些选择。

  • 使用Interface Builder。您可以轻松地多次复制粘贴现有按钮,但以后很难在任何地方进行更改和应用。相反,您可以将按钮存储在xib中并加载它。所以一旦你改变了一些属性,在下一个版本中你将更新所有按钮。
  • 使用hack like this
  • 复制实例化视图
  • 创建一个包含所有创建逻辑的UI工厂类。

我更喜欢单独的xib,特别是对于动画丰富的按钮。

答案 2 :(得分:0)

class ReusableButton: UIButton {

override init(frame: CGRect) {
    super.init(frame: frame)
    self.layer.borderWidth = 1
    self.layer.borderColor = UIColor.lightGray.cgColor
    self.backgroundColor = .blue
    self.titleLabel?.font = UIFont(name: "fontName", size: fontSize)
    self.setTitle(title: "save", for: .normal)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

现在,在创建新按钮时,您只需声明

var myBtn = ReusableButton()

希望这会有所帮助。快乐编码:]