簡體   English   中英

自定義UIButton類,對不同的ViewControllers具有相同的操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM