Frage

Ich habe eine UITextField bekam, und als Text in das eingegeben wird, möchte ich die double aus dem Textfeld erhalten und einige Berechnungen durchführen und sie in einem UITableView angezeigt werden soll.

Der Beauftragte für die UITextField nimmt das UITextFieldDelegate Protokoll und implementiert sowohl textFieldShouldReturn: und textFieldDidEndEditing: Methoden. textFieldShouldReturn: tritt zurück ersten Responder-Status, die nach docs auch textFieldDidEndEditing auslösen sollen :, aber ich sehe nie textFieldDidEndEditing. genannt

- (BOOL)textFieldShouldReturn:(UITextField*)theTextField {
    if (theTextField == thresholdValue) {
        [thresholdValue resignFirstResponder];
    }
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [self updateThresholdValue:textField];
}

Es kann sein, bemerkenswert, dass ich auch versucht, einige der Ereignisse Textfeld an die Delegaten verbinden und den Ereignis Anruf updateThresholdValue mit:. Direkt, aber das hat nicht funktioniert entweder

War es hilfreich?

Lösung 3

Wie in einem der Kommentare erwähnt, habe ich versucht, eine einfachere Version zu replizieren, was ich versuchte, eine Hello World App zu tun mit, und es funktionierte auf Anhieb, ohne Probleme, so wie erwartet. Konfrontiert mit diesem, begann ich ein wenig zu wundern.

Irgendwo in der ganzen googeln ich versuche tat, um eine Antwort auf dieses Problem zu umgehen, lief ich über einen Link, wo eine Person ein Problem mit Ereignissen nicht von einem Auslöseknopf aufweist, wurde, und es stellte sich heraus, dass das Problem wurde im Zusammenhang die Ansicht in dem die Taste platziert und dass im Hinblick auf die Schaltfläche eines anderen subview als Peer hat, und dass subview war irgendwie die Ereignisse zu essen statt zuzulassen, dass sie gehen, wo sie gerichtet worden sind. Das Szenario war nicht genau das gleiche wie mir, aber es hörte sich so nahe, dass Untersuchung lohnen würde. Trotz all der hervorragende Beratung hier erhielt, hatte noch keine Frucht getragen.

Letzte Nacht habe ich beschlossen, komplett neu zu erstellen, die NIB-Datei von Grund auf neu (machte eine Kopie dessen, was ich zuerst hatte), und ich habe es zu arbeiten. Der wesentliche Unterschied zu sein scheint, dass ich in der ursprünglichen Nicht-Arbeits Nib-Datei, ich über einen TableViewController aus der Palette gezogen hatte, änderte dann ihren Typen zu meiner Unterklasse PZTableViewController. Wenn ich das gleiche tat in meiner neuen Spitze, haben die Ereignisse nicht ausgelöst. Wenn auf der anderen Seite, entfernte ich den schleppte über TableViewController und stattdessen nur über einen NSObject gezogen und änderte seine Klasse PZTableViewController und verrohrt alles auf, alles „nur gearbeitet“.

Ich werde versuchen, den Link zu jagen, die mich auf dieser Denk angefangen hatte und per Post entweder als bearbeiten oder als Kommentar.

Das ist auch keine vollständige Antwort, weil ich den Unterschied zwischen der von-der-Palette TableViewController und meiner Unterklasse noch nicht verstehen. Als ich das heraus, werde ich diese Antwort über bearbeiten oder Kommentar aktualisieren.

Andere Tipps

lief in das gleiche Problem, das Sie beschrieben. Nach allem, was ich versucht, was ich denken konnte hinzugefügt, um diese delegierte Methode:

// if we encounter a newline character return
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
    // enter closes the keyboard
    if ([string isEqualToString:@"\n"])
    {
        [textField resignFirstResponder];
        return NO;
    }
    return YES;
}

Nun ist das textFieldShouldEndEditing Feuer und das Textfeld tritt zurück Ersthelfer.

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

textFieldDidEndEditing wird ausgelöst, wenn das Textfeld seinen ersten Responder-Status tritt zurück, während textFieldShouldReturn ausgelöst, wenn die Return-Taste gedrückt wird.

Es Sounds wie Ihr Textfeld nie scheidet als firstResponder. Sie können es ziemlich leicht überprüfen, indem Sie eine Debug-Ausgabe setzen (wie in den Kommentaren vorgeschlagen) und nur mit einem Hauch aus dem Textfeld navigieren -. ZB Start und tippen Sie die Eingabe gerade außerhalb des Feldes zu zwingen firstResponder zum Rücktritt

Nicht sicher, ob das hilft viel, aber es klingt wie ein seltsamer Fall, dass Sie schlagen.

I Verdrahtung editingChanged endete bis zu jeder einzelnen Änderung zu einem Textfeld aufnehmen, anstatt herauszufinden, wie alle Ecke Fälle abzudecken mit den restlichen Rückrufen.

Sehr "effizient" aufgrund der Android-like "Brauchbarkeit" der textFieldDidEndEditing (Sarkasmus).

Wenn Sie angenommen UITextFieldDelegate Protokoll in Ihren View-Controller, schreiben Sie dann die folgende Zeile Code in viewDidLoad Verfahren die Methoden des obigen Protokolls zu Ihren entsprechenden Textfeldern zu aktivieren:

override func viewDidLoad() {
    //other stuff
    yourTextField.delegate = self
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top