2016-07-15 50 views
1

添加以下常见的UIBarButtonItem是一段代码未工作:需要跨所有VC

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

    } 

崩溃,出现此错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: unrecognized selector sent to class 0x14c830

有人导向器可以为我在做什么错误?谢谢。

回答

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()

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

    } 
} 
+0

使用您的BaseViewController这一功能,并将努力为所有视图 - 控制 –

+0

@Meet沙阿是这样做,因为开发说。 –

+0

虽然此代码段可能会解决问题,但包含解释确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要使用解释性注释来挤占代码,因为这会降低代码和解释的可读性! – reporter

2

一个简单的解决方案将被创建的一个UIViewControllerBaseViewController,子类。

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

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