2011-08-31 12 views
18

Sto lavorando a un'app che a un certo punto richiede l'input da tastiera. La mia app utilizza OpenGL ES per la visualizzazione e io ho il mio framework grafico in grado di visualizzare un campo di testo e sa come gestire il cursore e renderizzare il testo. Questo codice funziona benissimo su altre piattaforme che hanno una tastiera fisica, come Windows e OS X.Come visualizzare la tastiera dell'iPhone/iPad su un'app OpenGL ES a schermo intero

Tutto quello che serve per far funzionare la versione iOS della mia app è essere in grado di portare la tastiera su e giù a livello di programmazione, e anche per fare in modo che gli eventi della pressione dei tasti dell'utente vengano visualizzati nella mia vista, in modo da poterli instradare nel sistema degli eventi del mio framework.

Ho visto this question, ma non riuscivo a rendere la soluzione illustrata lì lavoro. Non sono sicuro se è perché sto facendo qualcosa di sbagliato, o perché non funziona sulle attuali versioni di iOS.

MODIFICA: Sarebbe utile puntare a un'app funzionante con codice sorgente che crea un elemento dell'interfaccia utente in modo programmatico e lo visualizza su uno schermo GL ES. Penso di poter capire il resto se capisco quella parte.

+0

Non è possibile farlo funzionare in che senso? La tastiera non appare, non è possibile reindirizzare l'input di testo (che sarebbe meglio fare con un delegato, comunque) o qualcos'altro? Puoi mostrare il tuo codice UITextField? – Tommy

+0

Il problema è che la tastiera non appare, corretta. Se rendo visibile UITextField invece che nascosto, non lo vedo nemmeno sul mio schermo GL. – Miguel

+0

Quale framework grafico usi per visualizzare il campo di testo? –

risposta

22

Non posso puntare a un esempio di lavoro, ma credo che quello che stai cercando è qui http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKeyInput_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIKeyInput

L'idea di base è che si implementa il protocollo UIKeyInput su un oggetto UIResponder, come ad esempio un UIView . Effettua la visualizzazione del primoResponder e la tastiera dovrebbe apparire automaticamente. Il protocollo UIKeyInput fornisce un feedback semplice per l'inserimento di un carattere e l'eliminazione di un carattere quando l'utente preme i pulsanti sulla tastiera.

questo non è il codice di lavoro, ma sarebbe simile a questa:

@interface MyKeyboardView : UIView <UIKeyInput> 
@end 

@implementation MyKeyboardView 
- (void)insertText:(NSString *)text { 
    // Do something with the typed character 
} 
- (void)deleteBackward { 
    // Handle the delete key 
} 
- (BOOL)hasText { 
    // Return whether there's any text present 
    return YES; 
} 
- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 
@end 

quando la vista è attched, ne fanno il primo risponditore per mostrare la tastiera

[myView becomeFirstResponder]; 

o dimettersi primo risponditore per spegnere la tastiera

[myView resignFirstResponder]; 

Modifica: assicurarsi che la vista sia allegata alla vi Ew gerarchia o questo probabilmente non farà nulla.

+0

Grazie, farò un tentativo. Dal momento che ho un'unica vista nella mia app, ho pensato che fosse già il primo a rispondere. Mi stavo rinunciando a diventare FirstResponder sul campo di testo, che era figlio della vista. C'è un vantaggio nel creare una seconda visione solo per questo? – Miguel

+3

Grazie mille per il vostro aiuto. Sono riuscito a far apparire la tastiera seguendo il tuo consiglio. Un dettaglio che ti è sfuggito potrebbe non essere ovvio (almeno non era per me) è che un UIView di default non diventerà il primo soccorritore, devi implementare canBecomeFirstResponder e restituire YES da esso per abilitarlo. – Miguel

+0

Non sono sicuro se ci sia un vantaggio significativo nell'usare una seconda vista per gestire la tastiera, ma forse se stessimo tentando di elaborare altri eventi nella stessa vista (touch event, forse), allora usare una vista figlia potrebbe darti una migliore controllo sulla catena di risposta. –

Problemi correlati