0

Ich habe eine UITextField Unterklasse. Ich musste wissen, wann sich der Text änderte, und ich konnte das mit NotificationCenter erreichen und .UITextFieldTextDidChange beobachten, aber jetzt muss ich wissen, wann der Benutzer auf den Zurück-Knopf klickt. Die einzige Lösung, die ich darüber nachdenken kann, ist die UITextField Unterklasse, die Delegate von sich selbst zu sein, aber es klingt nicht sauber.Erfassen Sie Delegate-Methoden aus UITextField-Unterklasse, ohne den Delegaten

  1. Gibt es eine saubere Art und Weise das Return-Taste Ereignis von Unterklasse
  2. Ist es Ok zu bekommen, um die UITextField Unterklassen zu setzen die Delegierten davon selbst zu sein?
+0

Darf ich Sie fragen, warum Sie das brauchen? – Andrea

+0

Ich verwende derzeit das 'UITextFieldDelegate', wo ich den Delegaten auf die entsprechenden Textfelder setze, wo die RETURN-Taste identifiziert werden muss. Sie können sich dann mit 'func textFieldShouldReturn (_ textField: UITextField) -> Bool' identifizieren, wenn die Zurück-Schaltfläche angetippt wurde. Trotzdem bin ich mir nicht 100% sicher, ob dies die sauberste Lösung ist. – AlexWoe89

+0

Es gibt eine interessante Diskussion über den zweiten Punkt Ihrer Frage hier: https://stackoverflow.com/questions/29054602/does-a-class-being-its-own-delegate-follow-ios-convention –

Antwort

2

In der Unterklasse tun

self.addTarget(self, action: #selector(returnKeyPressed), for: .editingDidEndOnExit); 

bei Äpfeln doc Suchen Sie UIControlEvents

UIControlEventEditingDidEndOnExit = 1 < < 19, // 'Return-Taste' endet Bearbeitung

+0

Gut zu wissen. Das beantwortet die Frage. Aber am Ende habe ich das textField in eine 'UIView' verpackt und es zum Delegaten von' UITextField' gemacht, was 'privat' sein kann. – iOSGeek

0
sehen

Sie können Ihren viewController als Delegat festlegen. In viewDidLoad können Sie diese Codezeile hinzufügen.

myTextField.delegate = self 

Sie benötigen auch das UITextFieldDelegate-Protokoll für den ViewController.

extension MyViewController: UITextFieldDelegate { 
    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     //User tapped the return button 
     return true 
    } 
} 

Ich denke, es ist nichts falsch mit der Delegierten auf die Unterklasse setzen. Wenn Sie das Tippen außerhalb Ihrer Klasse kennen müssen, benötigen Sie einen anderen Delegierten, damit Sie auch meine erste Lösung verwenden können. Sie sollten sich darüber im Klaren sein, dass Ihr Code in der Unterklasse nicht mehr aufgerufen wird, wenn Sie den Delegaten ändern. Dies könnte zu unerwartetem Verhalten führen.

+0

Was du geschrieben hast ist vollkommen in Ordnung, er fragte, was er in seiner' UITextField' Unterklasse tun kann. und dort ist es nicht empfehlenswert, den Delegaten zu verwenden, da der Benutzer der Unterklasse wie der oben erwähnte 'MyViewController' gerne Delegierter wäre :) – Ladislav

+0

Ich fragte nach make the textField es selbst der Delegat etwas wie: ' textField. delegate = self, aber ich bin mir bewusst, dass der ViewController der Delegierte sein kann – iOSGeek

+0

Ich beantwortete beide seiner Fragen. Der erste fragt nach nichts in seiner Unterklasse. Es fragt nach einer sauberen Lösung und ich denke, den ViewController als einen Delegaten zu setzen, ist eine saubere Lösung. – Yannick

Verwandte Themen