2017-06-03 65 views
2

我創建以下列方式按鈕,在我的ViewController:如何將自定義類設置爲以編程方式創建的UIButton?

var userButton: Button! 

override func viewDidLoad() { 

    userButton = Button() 
    userButton.frame = CGRect(x: self.view.frame.width/2 + 90, y: 
    self.view.frame.height/1.5 + 110, width: 100, height: 100) 
    userButton.addTarget(self, action: #selector(MainController.userButtonTapped(sender:)), for: .touchUpInside) 

    self.view.addSubview(userButton) 
} 

這是Button類我創建:

import UIKit 

@IBDesignable 
class Button: UIButton { 

// MARK: - PROPERTIES 

@IBInspectable var cornerRadius: CGFloat = 3.0 { 
    didSet { 

     setupView() 
    } 
} 

// MARK: - CONFIGURATION 

override func awakeFromNib() { 

    setupView() 
} 

override func prepareForInterfaceBuilder() { 
    super.prepareForInterfaceBuilder() 

    setupView() 
} 

/** 
* Sets default properties to the view. 
*/ 
func setupView() { 

    self.layer.cornerRadius = cornerRadius 

    * Shadow properties */ 
    self.layer.shadowColor = SHADOW_COLOR.cgColor 
    self.layer.shadowOpacity = 0.6 
    self.layer.shadowRadius = 6.0 
    self.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) 
} 
} 

當運行應用程序,userButton沒有在課堂上設置的屬性。但是,當我在ViewController中設置這些屬性時,它可以工作。爲什麼它不適用於課堂?

回答

2

而不是寫這個代碼: -

override func awakeFromNib() { 
    super.awakeFromNib() 
    setupView() 
} 

寫setupView函數()在layoutSubviews()()

如: -

override func layoutSubviews()() { 
     super.layoutSubviews()() 
     setupView() 
    } 
+0

如果子視圖的邊界並沒有改變,爲什麼你調用viewDidLayoutSubViews? – Nan

+0

在awakeFromNib你的佈局沒有形成,這就是爲什麼我要求你在這裏執行代碼,如果你想操縱你的佈局。 – Himanshu

+0

這不起作用,因爲UIButton沒有viewDidLayoutSubViews。 –

相關問題