2011-12-12 13 views
12

Ho ricevuto un TextView che dovrebbe essere visualizzato premendo un pulsante e consente all'utente di inserire il testo tramite la tastiera.Risoluzione dei problemi becomeFirstResponder non mostra la tastiera per alcuni utenti

- (IBAction) changeName { 

    changeNameBtn.hidden = YES; 
    backBtn.hidden = YES; 

    usernameLabel.hidden = NO; 
    inputTextField.hidden = NO; 
    [inputTextField becomeFirstResponder]; // to show keyboard 
} 

Questo funziona bene per la maggior parte di noi.

Ma la tastiera non viene visualizzata per alcuni dei miei tester, in una posizione geograficamente remota. Come complicare lo scatto? E quale potrebbe essere la ragione del diverso comportamento dei nostri dispositivi? Funziona bene per me e per tutti gli altri. Tutti usiamo gli stessi dispositivi (iPod, iOS 4.1 - 5.1).

prima cosa che ho provato non ha funzionato:

Pensai che l'inputTextField ha fatto in qualche modo non diventano visibili in tempo, prima che becomeFirstResponder è stato licenziato, così ho aggiunto setNeedsDisplay come ho pensato che sarebbe forzare un aggiornamento .

[inputTextField setNeedsDisplay]; 
[inputTextField becomeFirstResponder]; 

Seconda cosa che ho provato non ha funzionato:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 

Terzo cosa che ho provato è una soluzione, che richiede l'utente sfortunato di premere il campo:

- (IBAction) inputTextFieldTouch { 
    [inputTextField becomeFirstResponder]; 
} 

Questa soluzione alternativa funziona, ma deve esserci un modo migliore. Per favore, spiegami cosa sto facendo male! :) E come affrontare problemi come questo senza essere in grado di duplicarli da solo?

risposta

9

La visualizzazione del testo non è terminata quando si tenta di renderlo il primo risponditore.

È possibile provare ad animare l'aspetto e impostare il primo risponditore nel blocco di completamento.

[UIView animateWithDuration:0.0 animations:^{ 
    [view addSubview:textView]; 
} completion:^(BOOL finished){ 
    [textView becomeFirstResponder]; 
}]; 
0

provare a vedere se è possibile mostrare la tastiera prima:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 
26

ho chiamato becomeFirstResponder dopo da questa linea:

[self.searchBar performSelector:@selector(becomeFirstResponder) 
        withObject:nil 
        afterDelay:0.1f]; 

ha funzionato per me. Spero che questo aiuto.

+0

funziona in realtà meglio della risposta, che è contrassegnata corretta. –

+0

meglio, come, Ilya? – JOG

4

Come di iOS 8, chiamando becomeFirstResponder su un UITextView non mostra la tastiera per me sul simulatore iOS, ma lo fa sul dispositivo reale. Quindi assicurati di controllarlo con un dispositivo reale. Questo però non succede su iOS7.

+8

Hai premuto Cmd + Maiusc + K per utilizzare la tastiera del tuo computer? Questo mostra e nasconde la tastiera del simulatore per me. – chedabob

+0

Tutti i miei tester usano dispositivi reali, compresi quelli in cui la tastiera non mostrava. Come afferma la domanda, "Tutti usiamo gli stessi dispositivi (iPod, iOS 4.1 - 5.1)". – JOG

Problemi correlati