【问题标题】:Custom UIButton class with same action for different ViewControllers自定义 UIButton 类对不同的 ViewController 具有相同的操作
【发布时间】:2017-10-15 08:48:29
【问题描述】:

我已经看到很多在 ViewController 类和情节提要中以编程方式创建按钮的示例(之后使用 @IBAction)。

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

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

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

如何避免这种代码重复?

【问题讨论】:

    标签: ios swift uiviewcontroller uibutton


    【解决方案1】:

    如果这个按钮在故事板的每个视图控制器中,那么我想你需要在某个时候连接它。

    我建议您创建一个UIViewController 的子类,然后它是您所有使用此按钮的视图控制器的基类。您应该在基类中创建一个插座,然后在情节提要中为每个子类连接该插座。

    那么只有基类有你发布的这个方法,并且在视图加载时你需要手动添加一个目标到这个方法。我猜如果基本视图控制器有这个方法IBAction,你可以简单地在你的故事板中连接那个。

    【讨论】:

      【解决方案2】:

      在情节提要中,您必须在导航栏上为每个视图控制器创建按钮,现在对于菜单按钮的操作,您可以创建类似的 IBAction

      extension UIViewController {
      
      @IBAction func btnActionBack(_ sender: UIButton) {
         moveBack()
      }
      
      @IBAction func btnActionOpenSideMenu(_ sender: UIButton) {
          toggleSideMenuView()
      } }
      

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

      【讨论】:

      • 听起来不太好,因为这两种方法将被添加到每个UIViewController - 即使对于那些没有侧边菜单按钮的方法。
      【解决方案3】:

      为按钮创建一个通用类,您可以在其中添加:

      button.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside)
      
      
      func buttonAction(sender: UIButton!) {   print("Button tapped") }
      

      【讨论】:

        【解决方案4】:

        在您的按钮类中;

        斯威夫特 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
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-17
          • 1970-01-01
          相关资源
          最近更新 更多