需要在所有VC

时间:2016-07-15 11:23:14

标签: ios swift swift2

以下是一段无效的代码:

class Person {

        static fun addBtn(cName:UIViewController)
        {
           let rightBtn = UIBarButtonItem.init(title: "Right", style: .Plain, target: UIBarButtonItem.self, action:#selector(UIBarButtonItem.self.newMenuTapped(_:)))
           cName.navigationItem.rightBarButtonItem  = rightBtn
        }

    }
    extension UIBarButtonItem
    {

        func newMenuTapped(sender: UIBarButtonItem)
        {
        print("Tapped")
        }

    }

崩溃时出现此错误:

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:发送到无法识别的选择器   class 0x14c830

有人可以指导我做错了什么吗?感谢。

4 个答案:

答案 0 :(得分:3)

为此UIViewController创建一个扩展程序:

extension UIViewController {
    func addButton() {
        let button = UIBarButtonItem(title: "Right", style: .Plain, target: self, action: #selector(self.rightButtonPressed(_:)))
        self.navigationItem.setRightBarButtonItem(button, animated: false)
    }

    func rightButtonPressed(sender: UIBarButtonItem) {
        print("tapped")
    }
}

在要实现按钮的所有视图控制器中调用self.addButton()

答案 1 :(得分:2)

一个简单的解决方案是创建BaseViewController的子UIViewController

创建一个添加导航栏和导航栏项的简单方法。 将此BaseViewcontroller设置为您想要类似功能的所有视图的超类。

答案 2 :(得分:1)

感谢。 @xoudini

以下是我的代码出了什么问题: -

    class Person 
    {

      static func addBtn(cName: UIViewController)
        {

    let rightBtn = UIBarButtonItem(title: "RightView", style: .Plain, target: UIBarButtonItem(), action: #selector(UIBarButtonItem.newMenuTapped(_:)))
            cName.navigationItem.rightBarButtonItem = rightBtn
        }
    }

extension UIBarButtonItem {
        func newMenuTapped(sender: UIBarButtonItem)
        {
            print("Tapped 3")
        }
}

答案 3 :(得分:0)

创建UIViewController的扩展,并将此代码段放在其中。

extension UIViewController 
{
   func addRightBarButtonItem()
   {
      var btn = UIBarButtonItem(
            title: "Right",
            style: .Plain,
            target: self,
            action: #selector(newMenuTapped(_:))
        )
      self.navigationItem.setRightBarButtonItem(btn, animated: false)
   }
    func newMenuTapped(sender: UIBarButtonItem) 
    {

    }
}