2016-12-15 49 views
-1

我是iOS和Swift的新手,我需要一些幫助。使用擴展名創建自定義UIButton

我想創建自定義的UIButton

這裏是我做過什麼

protocol ButtonProtocol {} 


extension ButtonProtocol where Self: UIButton { 

    func addOrangeButton(){ 
     layer.cornerRadius = 8 
     layer.backgroundColor = UIColor(netHex:ButtonColor.orange).cgColor 
    } 
} 

我希望所有PARAMS就來自這裏它們是cornerRadius,backgrounColor,highlightedColor,文字顏色,大小等等

我想用這種方式bcoz也許將來按鈕顏色會改變我會直接從一個地方改變它。

但我不明白什麼是圖層我怎麼能把它作爲UIButton?

有人可以告訴我應該採取哪種方式嗎?

回答

2

您可以創建UIButton的子類,以將您自己的自定義外觀添加到按鈕中。像這樣

import UIKit 

protocol DVButtonCustomMethods: class { 
func customize() 
} 

class DVButton: UIButton { 
var indexPath: IndexPath? 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    customize()// To set the button color and text size 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    customize()// To set the button color and text size 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    customize() 
} 

} 

extension DVButton: DVButtonCustomMethods { 
func customize() { 
    layer.cornerRadius = self.frame.size.height/2 
    backgroundColor = UIColor.white 
    tintColor = UIColor.red 
    titleLabel?.textColor = UIColor.black 
    clipsToBounds = true 
} 
} 

現在需要做的是,在界面生成器中創建一個按鈕,併爲其指定subClass作爲其類。這就是所有的一切都會隨着你的意願而改變。如果你想改變按鈕的顏色只需改變你的子類,它將影響所有分配給你的子類的按鈕。

指定子類的按鈕:請參考下圖像

enter image description here

謝謝:)

0

試試這個:

class func CutomeButton(bgColor: UIColor,corRadius: Float,hgColor: UIColor, textColor: UIColor, size: CGSize, titleText: String) -> UIButton { 
    let button = UIButton() 
    button.layer.cornerRadius = CGFloat(corRadius) 
    button.backgroundColor = bgColor 
    button.setTitleColor(textColor, for: .normal) 
    button.frame.size = size 
    button.setTitle(titleText, for: .normal) 
    return button 
} 
0

如果我沒有理解好了,要修改一個具有特定參數的UIButton,讓我告訴你如何做到這一點:

extension UIButton 
{ 
    func setRadius(radius:CGFloat) { 
     self.layer.cornerRadius = radius 
    } 
} 

使用它,如下所示:

yourButton.setRadius(radius: 15) 
1

你定義的擴展方式,不會讓你能夠在UIButton實例,以簡單的使用它。

所以,你可以決定是否延長UIButton符合協議,或者您可以創建UIButton

// in this way you can use the `addOrangeButton` method anywhere 
extension UIButton: ButtonProtocol {} 

// in this way your new subclass contains the addOrangeButton definition 
// and a normal UIButton cannot access that method 
final class OrangeButton: UIButton, ButtonProtocol { 

    func setupButton() { 
     addOrangeButton() 
    } 
} 
一個子類
相關問題