我已经看过很多在ViewController类和故事板中以编程方式创建按钮的例子(之后使用@IBAction)。
有没有办法为按钮创建自定义类并使其切换到我的侧边菜单,而无需在每个ViewController中重写此操作。
现在我在故事板中需要的每个VC上创建此按钮并复制粘贴此代码:
@IBAction func openMenuClick() {
sideMenuController?.toggle()
}
如何避免此代码重复?
答案 0 :(得分:2)
如果此按钮位于故事板中的每个视图控制器中,那么我猜您需要在某个时刻连接它。
我建议您创建一个UIViewController
的子类,然后使用此按钮为所有视图控制器创建一个基类。您应该在基类中创建一个插座,然后应该在每个子类的故事板中进行连接。
然后只有基类具有您发布的此方法,并且在视图上加载时您需要手动将目标添加到此方法。我猜或者如果基本视图控制器将此方法设置为IBAction
,您只需在故事板中连接该方法即可。
答案 1 :(得分:1)
在故事板中,您必须在每个视图控制器的导航栏上创建按钮,现在,对于菜单按钮的操作,您可以创建像
这样的IBActionextension 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
}