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