用于重用的自定义 UIButton 类
Posted
技术标签:
【中文标题】用于重用的自定义 UIButton 类【英文标题】:Custom UIButton Class for Reuse 【发布时间】:2015-05-30 17:56:54 【问题描述】:在网上找了一段时间了,还没有得到关于如何做到这一点的直接答案。
在我的应用程序中,我需要一个驻留在许多 ViewController 上的“下一步”按钮。我希望这个下一个按钮是相同的(有边框、相同的背景颜色、相同的自定义字体、相同的字体大小、相同的按钮大小)。
//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];
在每个视图控制器中编写所有这些代码似乎很愚蠢。
谁有办法解决这个问题?
【问题讨论】:
【参考方案1】:您可以为 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()
【讨论】:
应该返回按钮,而不是 Swift 示例中的函数?例如。返回 tempButton,而不是返回 nextButton()?【参考方案2】: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()
希望这会有所帮助。快乐编码:]
【讨论】:
【参考方案3】:有一些选择。
使用界面生成器。您可以轻松地多次复制粘贴现有按钮,但以后将很难更改并应用到任何地方。相反,您可以将按钮存储在 xib 中并加载它。因此,一旦您更改了某些属性,在下一次构建时,您将更新所有按钮。 使用hack like this 复制实例化视图 创建一个包含所有创建逻辑的 UI 工厂类。为此我更喜欢单独的 xib,尤其是对于具有丰富动画的按钮。
【讨论】:
不要认为我可以使用 InterfaceBuilder,因为我有自定义字体。可能是错的。自定义字体的新手也 自定义字体在 IB 上是可以的,我也使用自定义字体,但您需要定义类别。我用那个github.com/samwize/UIView-CustomFonts/blob/master/Classes/… 所以我只是在字符串类型的按钮(标签、文本字段等)上定义自定义属性fontFamily
并在那里传递字体名称。以上是关于用于重用的自定义 UIButton 类的主要内容,如果未能解决你的问题,请参考以下文章