2012-04-10 11 views
11

Ho impostato un numero personalizzato inputView al mio UITextField. Ho bisogno di un modo per visualizzare i dati selezionati nella mia personalizzata inputView nel UITextfield. Mi piacerebbe farlo allo stesso modo della tastiera di sistema.Input personalizzatoVisualizza per UITextField, come posso reindirizzare l'input al campo di testo?

Qualcuno sa come è fatto? In che modo la tastiera di sistema ottiene un riferimento allo UITextfield che è il primo risponditore?

+0

si prega di essere più precisi, cosa intendete per "immissione diretta al campo di testo"? Vuoi mettere a fuoco il UITextField? – Dion

+0

Scusa, pensavo di essere più preciso nella mia spiegazione. Quello che voglio dire è che imposto la proprietà inputView su un UITextField alla mia vista di input personalizzata. Quindi, quando l'utente preme un pulsante sul mio inputView personalizzato, come faccio a ottenere un riferimento a UITextfield che è il primo risponditore corrente in modo da poter modificare la proprietà text di quel UITextfield per riflettere l'input dell'utente? –

risposta

12

In che modo la tastiera di sistema ottiene un riferimento a UITextfield che è il primo risponditore?

Richiede solo il sistema per il primo soccorritore; sfortunatamente, questo è un metodo UIKit privato (o lo era, l'ultima volta che ho controllato). Puoi trovare il primo risponditore ricorsivamente attraverso la gerarchia delle viste e chiedere ogni vista, ma è piuttosto maldestro.

Invece, è possibile aggiungere un link al campo di testo sulla vista di ingresso (sto assumendo la visualizzazione di ingresso è una sottoclasse UIView su ordinazione):

@property(nonatomic, assign) UITextField* target; 

Quindi utilizzare i metodi delegato UITextField in vista controller per vedere quando il campo di testo viene messo a fuoco:

- (void)textFieldDidBeginEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = textField; 
} 

- (void)textFieldDidEndEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = nil; 
} 
+0

Ottima risposta dave, questo è esattamente quello che stavo cercando, grazie. –

10

quando si invia in ingresso dalla visualizzazione di input personalizzato di nuovo al campo di testo, notare che è possibile (dovrebbe) utilizzare i metodi UIKeyInput di protocollo che UITextField Conforme a. Vale a dire:

- (void)deleteBackward; 
- (void)insertText:(NSString *)text; 
Problemi correlati