Mam zestaw kontrolerów widoku, które będą miały przycisk paska menu. Stworzyłem protokół dla tych viewControllers do przyjęcia. Rozszerzyłem też protokół, aby dodać domyślne funkcje.Dodawanie działania docelowego w przedłużeniu protokołu kończy się niepowodzeniem
Mój protokół wygląda,
protocol CenterViewControllerProtocol: class {
var containerDelegate: ContainerViewControllerProtocol? { get set }
func setupMenuBarButton()
}
I, rozszerzenie wygląda tak,
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()
}
}
My viewController przyjmuje Protocol -
class MapViewController: UIViewController, CenterViewControllerProtocol {
weak var containerDelegate: ContainerViewControllerProtocol?
override func viewDidLoad() {
super.viewDidLoad()
setupMenuBarButton()
}
}
mam przycisk, aby wyświetlić ładnie, ale kiedy go klikam, aplikacja rozłącza się z
[AppName.MapViewController menuTapped]: unrecognized selector sent to instance 0x7fb8fb6ae650
Jeśli zaimplementuję metodę wewnątrz ViewController, działa dobrze. Ale będę duplikować kod we wszystkich viewControllerach, które są zgodne z protokołem.
Wszystko, co robię źle tutaj? Z góry dzięki.