Domanda

Ho un UITextField e quando il testo viene inserito in quello, voglio ottenere il doubleValue dal campo di testo ed eseguire alcuni calcoli e visualizzarli in un UITableView.

Il delegato per UITextField adotta il protocollo UITextFieldDelegate e implementa sia textFieldShouldReturn: sia textFieldDidEndEditing: metodi. textFieldShouldReturn: si dimette dallo stato del primo risponditore che, secondo i documenti, dovrebbe anche attivare textFieldDidEndEditing :, ma non vedo mai textFieldDidEndEditing: chiamato.

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

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

Potrebbe valere la pena notare che ho anche provato a connettere alcuni degli eventi del campo di testo al delegato e avere la chiamata all'evento updateThresholdValue: direttamente, ma non ha funzionato neanche.

È stato utile?

Soluzione 3

Come menzionato in uno dei commenti, ho provato a replicare una versione più semplice di quello che stavo cercando di fare usando un'app HelloWorld, e ha funzionato al primo tentativo, senza problemi, proprio come previsto. Di fronte a ciò, ho iniziato a chiedermi un po '.

Da qualche parte in tutto il googling che ho fatto per cercare di ottenere una risposta a questo problema, mi sono imbattuto in un collegamento in cui una persona stava avendo un problema con eventi che non si attivavano da un pulsante, e si è scoperto che il problema era legato a la vista in cui è stato posizionato il pulsante e quella vista con un'altra sottoview come peer al pulsante, e quella sottoview stava in qualche modo mangiando gli eventi piuttosto che permettere loro di andare dove erano stati diretti. Lo scenario non era esattamente uguale al mio, ma sembrava abbastanza vicino da rendere utile l'indagine. Nonostante tutti gli eccellenti consigli ricevuti qui, nessuno aveva ancora dato i suoi frutti.

Ieri sera ho deciso di ricreare completamente il file pennino da zero (ho fatto una copia di quello che avevo prima) e l'ho fatto funzionare. La differenza chiave sembra essere che nel file pennino originale non funzionante, avevo trascinato su un TableViewController dalla tavolozza, quindi ho cambiato il suo tipo nella mia sottoclasse PZTableViewController . Quando ho fatto la stessa cosa nel mio nuovo pennino, gli eventi non hanno funzionato. Se, d'altra parte, ho rimosso il TableViewController trascinato e invece ho semplicemente trascinato un NSObject e ho cambiato la sua classe in PZTableViewController e ho installato tutto su, tutto " appena funzionato " ;.

Cercherò di inseguire il link che mi ha fatto iniziare su questa linea di pensiero e pubblicarlo come modifica o come commento.

Anche questa non è una risposta completa perché non capisco ancora la differenza tra il TableViewController e la mia sottoclasse. Quando lo capirò, aggiornerò questa risposta tramite modifica o commento.

Altri suggerimenti

Ho riscontrato lo stesso problema che hai descritto. Dopo aver provato tutto ciò che mi è venuto in mente ho aggiunto questo metodo delegato:

// 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;
}

Ora il textFieldShouldEndEditing si attiva e il campo di testo si dimette dal primo risponditore.

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

textFieldDidEndEditing viene attivato quando il campo di testo si dimette dal suo primo stato di risposta mentre textFieldShouldReturn viene attivato quando viene premuto il pulsante di ritorno.

Sembra come se il tuo campo di testo non si dimettesse mai come primoRisponditore. Puoi verificarlo abbastanza facilmente mettendo un po 'di output di debug (come suggerito nei commenti) e semplicemente navigando fuori dal campo di testo con un tocco - ad esempio, inizia a digitare, quindi tocca fuori dal campo per forzarlo a dimettersi per primoRisponditore.

Non sono sicuro che ciò aiuti molto, ma sembra uno strano caso che stai colpendo.

Ho finito con il cablaggio per la modifica Modificato per registrare ogni singola modifica in un campo di testo piuttosto che capire come coprire tutti i casi angolari con i callback rimanenti.

Molto "efficiente" a causa dell'usabilità "Android" simile a " del textFieldDidEndEditing (sarcasmo).

Se hai adottato il protocollo UITextFieldDelegate nel tuo controller di visualizzazione, quindi scrivi la seguente riga di codice nel metodo viewDidLoad per attivare i metodi del protocollo sopra nei campi di testo corrispondenti:

override func viewDidLoad() {
    //other stuff
    yourTextField.delegate = self
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top