2016-07-15 2 views
1

Ниже приводится фрагмент кода, который не работает:нужно добавить общий UIBarButtonItem во всех VCs

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 и будет работать для всех ViewController –

+0

@Meet шаха да сделать это как Dev сказал. –

+0

Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, так как это уменьшает читаемость кода и объяснений! – reporter

2

Простое решение будет создать BaseViewController, подкласс UIViewController.

Создайте простой способ добавления панели навигации и элемента навигационной панели. Сделайте это 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") 
     } 
} 
Смежные вопросы