Dodana z komentarzy do innej odpowiedzi: Funkcja func() to nie tylko kiepski wybór dla nazwy i działania funkcji, ale nie kompilacji. (Można go użyć jako parametru funkcji wejściowej, co robię dla jasności podczas przekazywania w celu/akcji do init(), który ustawia te rzeczy.) Zamieniam to na MyAction() dla jasności.
Spróbuj tego:
self.addTarget(self, action: #selector(MyAction), for: .touchUpInside)
Wspomniany o wiele lepiej konstrukcja jest przeniesienie funkcji MyAction() do przycisku SuperView, jak to sprawia, że rzeczy bardziej związane z podstawowego projektu MVC:
Superview:
let myButton = ActionButton()
// include other button setup here
myButton.addTarget(self, action: #selector(MyAction), for: .touchUpInside
func action(_ sender: ActionButton) {
// code against button tap here
}
Alternatywne kodowanie do tego, utrzymując "działanie()" meto d w kontrolerze widoku, ale porusza tylko z „addTarget” do przycisku:
self.addTarget(superview?, action(superview?.MyAction), for: .touchUpInside)
Dlaczego prośbą rozważyć przesunięcie „MyAction()” metoda do SuperView? Dwukrotnie:
- Kontroluje on nie tylko przycisk, ale wszystkie inne widoki w jego widoku i zwykle współdziałają ze sobą za pomocą kontrolera widoku.
- Powoduje, że przycisk jest bardziej przydatny do wielokrotnego użytku w innych sytuacjach.
Twoja metoda 'action konflikty z' działania (dla :, forKey:) '' UIView' metoda, porównaj http://stackoverflow.com/questions/35658334/how-do-i-resolve -znaczny-użycie-kompilacji-z-swift-selektor-składnia. –