2015-05-30 48 views
2

在网上查找了一段时间,并没有得到直接的答案如何做到这一点。自定义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]; 

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

任何人都有解决方案吗?

回答

2

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

在Objective-C:

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

或斯威夫特:

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

    return nextButton() 
    } 
} 

然后使用创建它:

UIButton.nextButton() 
+1

应该返回按钮,而不是Swift示例中的函数?例如。返回tempButton,而不是返回nextButton()? – bwash70

0

有一些选择。

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

我宁愿单独使用xib,特别是对于富有动画的按钮。

+0

不要以为我可以使用InterfaceBuilder,因为我有自定义字体。可能是错的。自定义字体也是新的 – lr100

+0

自定义字体与IB一致,我也使用自定义字体,但您需要定义类别。我使用那一个https://github.com/samwize/UIView-CustomFonts/blob/master/Classes/UIView%2BCustomFonts.m – ReDetection

+0

所以我只是在字符串的按钮(标签,文本字段等)上定义自定义属性'fontFamily'在那里键入并传递字体名称。 – ReDetection