繁体   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