自定义UIButton类,对不同的ViewControllers具有相同的操作

时间:2017-05-16 10:14:11

标签: ios swift uiviewcontroller uibutton

我已经看过很多在ViewController类和故事板中以编程方式创建按钮的例子(之后使用@IBAction)。

有没有办法为按钮创建自定义类并使其切换到我的侧边菜单,而无需在每个ViewController中重写此操作。

现在我在故事板中需要的每个VC上创建此按钮并复制粘贴此代码:

@IBAction func openMenuClick() {
    sideMenuController?.toggle()
}

如何避免此代码重复?

4 个答案:

答案 0 :(得分:2)

如果此按钮位于故事板中的每个视图控制器中,那么我猜您需要在某个时刻连接它。

我建议您创建一个UIViewController的子类,然后使用此按钮为所有视图控制器创建一个基类。您应该在基类中创建一个插座,然后应该在每个子类的故事板中进行连接。

然后只有基类具有您发布的此方法,并且在视图上加载时您需要手动将目标添加到此方法。我猜或者如果基本视图控制器将此方法设置为IBAction,您只需在故事板中连接该方法即可。

答案 1 :(得分:1)

在故事板中,您必须在每个视图控制器的导航栏上创建按钮,现在,对于菜单按钮的操作,您可以创建像

这样的IBAction
extension UIViewController {

@IBAction func btnActionBack(_ sender: UIButton) {
   moveBack()
}

@IBAction func btnActionOpenSideMenu(_ sender: UIButton) {
    toggleSideMenuView()
} }

现在可以将按钮的touchUpInside插座拖到IBAction btnActionOpenSideMenu 。 我已经为自己使用了这个,我也创建了一个通用后退按钮动作来弹出视图控制器

答案 2 :(得分:0)

为您可以添加的按钮创建一个公共类:

button.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside)


func buttonAction(sender: UIButton!) {   print("Button tapped") }

答案 3 :(得分:0)

在您的按钮类中;

迅速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

}