Ho un set di controller di visualizzazione che avrà un pulsante della barra dei menu. Ho creato un protocollo per quei viewControllers da adottare. Inoltre, ho esteso il protocollo per aggiungere funzionalità predefinite.L'aggiunta dell'azione di destinazione nell'estensione del protocollo non riesce
mio protocollo sembra,
protocol CenterViewControllerProtocol: class {
var containerDelegate: ContainerViewControllerProtocol? { get set }
func setupMenuBarButton()
}
E, l'estensione sembra così,
extension CenterViewControllerProtocol where Self: UIViewController {
func setupMenuBarButton() {
let barButton = UIBarButtonItem(title: "Menu", style: .Done, target: self, action: "menuTapped")
navigationItem.leftBarButtonItem = barButton
}
func menuTapped() {
containerDelegate?.toggleSideMenu()
}
}
mio viewController adotta il protocollo -
class MapViewController: UIViewController, CenterViewControllerProtocol {
weak var containerDelegate: ContainerViewControllerProtocol?
override func viewDidLoad() {
super.viewDidLoad()
setupMenuBarButton()
}
}
ho avuto il pulsante per visualizzare bene, ma quando faccio clic su di esso, l'app si blocca con
[AppName.MapViewController menuTapped]: unrecognized selector sent to instance 0x7fb8fb6ae650
Se implemento il metodo all'interno di ViewController, funziona correttamente. Ma dovrei duplicare il codice in tutti i viewControllers conformi al protocollo.
Qualcosa che sto facendo male qui? Grazie in anticipo.