[英]How to give different tableViews same action between ViewControllers [swift]
[英]Custom UIButton class with same action for different ViewControllers
我已經看到很多在ViewController類和故事板中以編程方式創建按鈕的例子(之后使用@IBAction)。
有沒有辦法為按鈕創建自定義類,並使其切換我的側面菜單,而無需在每個ViewController中重寫此操作。
現在我在storyboard中需要的每個VC上創建此按鈕並復制粘貼此代碼:
@IBAction func openMenuClick() {
sideMenuController?.toggle()
}
如何避免此代碼重復?
如果此按鈕位於故事板中的每個視圖控制器中,那么我猜您需要在某個時刻連接它。
我建議您創建一個UIViewController
的子類,然后使用此按鈕為所有視圖控制器創建一個基類。 您應該在基類中創建一個插座,然后在故事板中為每個子類連接。
然后只有基類具有您發布的此方法,並且在視圖上加載時您需要手動將目標添加到此方法。 我想如果基本視圖控制器將此方法作為IBAction
您可以簡單地在故事板中連接該方法。
在故事板中,您必須在每個視圖控制器的導航欄上創建按鈕,現在,對於菜單按鈕的操作,您可以創建類似IBAction的IBAction
extension UIViewController {
@IBAction func btnActionBack(_ sender: UIButton) {
moveBack()
}
@IBAction func btnActionOpenSideMenu(_ sender: UIButton) {
toggleSideMenuView()
} }
您現在可以將按鈕的touchUpInside插座拖動到IBAction btnActionOpenSideMenu 。 我已經為自己使用了這個,我也創建了一個通用后退按鈕動作來彈出視圖控制器
為您可以添加的按鈕創建一個公共類:
button.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside)
func buttonAction(sender: UIButton!) { print("Button tapped") }
在你的按鈕類中;
斯威夫特4:
open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
guard let touchPoint = touches.first?.location(in: self) else { return }
guard self.bounds.contains(touchPoint) else { return }
// Do what you wanna do here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.