Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 需要在所有VCs中添加通用UIBarbuttonite_Ios_Swift_Swift2 - Fatal编程技术网

Ios 需要在所有VCs中添加通用UIBarbuttonite

Ios 需要在所有VCs中添加通用UIBarbuttonite,ios,swift,swift2,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(

以下是一段不起作用的代码:

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”,原因:无法识别的选择器已发送到 类0x14c830


有人能告诉我我做错了什么吗?谢谢。

创建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) 
    {

    }
}

创建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) 
    {

    }
}

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

创建一个简单的方法来添加导航栏和导航栏项。
使此BaseViewcontroller成为所有视图的超类,在这些视图中您需要类似的功能。

一个简单的解决方案是创建一个BaseViewcontroller,UIViewController的子类

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

为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。

为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。

谢谢@索迪尼

以下是我的代码的错误:-

    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")
        }
}
谢谢@索迪尼

以下是我的代码的错误:-

    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")
        }
}

在BaseViewController中使用此功能,将适用于所有用户viewcontroller@MeetShah是的,按照Dev说的做。虽然这段代码片段可能会解决这个问题,但包括一个解释确实有助于提高您的文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!在BaseViewController中使用此功能,将适用于所有用户viewcontroller@MeetShah是的,按照Dev说的做。虽然这段代码片段可能会解决这个问题,但包括一个解释确实有助于提高您的文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!