2012-01-11 14 views
7

OK Ho guardato e guardato e penso che manchi qualcosa sulle tastiere personalizzate e sull'inserimento di testo in un UITextField. Come molte persone sto creando una tastiera personalizzata UIView con il mio set di copritasti personalizzati su UIButtons personalizzato. Assegno quindi questa vista a UITextField inputView e poi la mia tastiera si apre quando quel campo di testo diventa il primo risponditore. Interno alla tastiera Catturo le azioni dei pulsanti e li traduco in quelli che sarebbero i tasti premuti.iOS Crea tastiera personalizzata Genera tratti chiave standard per UITextField

Ma da qui sono perplesso su come inviare le mie battiture al campo di testo. Ho visto molti esempi come iOS Custom Keyboard Updating Text Field In Parent View e Return Inputs To UITextfield With Custom Inputview e How To Push Key Value Into UITextView From Custom Keyboard In iOS in cui la soluzione sembra essere quella di incorporare un puntatore al target UITextField all'interno della visualizzazione personalizzata.

Questo non mi sembra giusto per me, come per il multiplo UITextFields o devo avere per modificare manualmente i riferimenti su una singola tastiera personalizzata ogni volta che un nuovo campo di testo diventa il primo soccorritore, o devo portare in giro una tastiera corrispondente personalizzato per ogni campo di testo che voglio supportare.

Mi sembra che una tastiera debba solo tradurre i tocchi in token e inviare quei token sulla linea affinché siano interpretati da chiunque li riceva (primo risponditore?). iPad For iPhone Developers 101 Custom Input View Tutorial sembra farlo, ma crea un protocollo personalizzato per farlo. Immagino (in realtà uno SWAG - Scientific Wild Arsed Guess) che le tastiere standard di iOS funzionano così, ma usano un protocollo specifico per passare le sequenze di tasti. Quindi quello che voglio essere in grado di fare è generare manualmente la stessa catena di eventi/messaggi che fa la tastiera standard.

Quindi, come posso fare questo? O posso farlo anche con le API pubbliche? O l'operazione delle tastiere standard è troppo vincolata a UITextField?

+0

So che questa domanda è obsoleta, ma ho creato un esempio completo, funzionante, open source su come fare questo chiamato Numberpad e metterlo su [Github] (https://github.com/lnafziger/Numberpad) – lnafziger

risposta

1

Questa è una domanda molto aperta. In realtà, sta a te scegliere quello che vuoi. Apple's documentation dichiara:

Le sottoview di una vista di input e di una vista di input di input possono essere qualsiasi cosa si desideri. Se sono pulsanti o altri controlli, è necessario specificare i target e le azioni per ciascun controllo e implementare i metodi di azione associati per eseguire l'input o la manipolazione dei dati.

Si potrebbe anche fare una sottoclasse UITextField e implementare in modo esplicito il getter per inputView per restituire un puntatore alla vostra abitudine classe di visualizzazione della tastiera. In questo getter puoi configurare un sistema di destinazione/azione simile a UIControl come suggerisci prima. Facendolo in questo modo si elimina la necessità di impostare la tastiera personalizzata dall'esterno - è tutto gestito internamente. Mette anche quel codice in un solo posto.

Una volta che il campo di testo personalizzato si dimette il primo risponditore, è possibile rimuovere il puntatore del campo di testo fuori dalla tastiera.

+0

In un certo senso, sto chiedendo esattamente cosa afferma lo stato di Apple Docs: i metodi per implementare l'immissione dei dati. In questo caso, voglio che quei metodi emulino quelli standard in modo che possa scambiare la mia tastiera con quella di Apple con modifiche minime al codice (ad esempio impostando o non impostando inputView only). La sottoclasse di UITextField è sul mio elenco per altri motivi (ed è il mio fallback anche in questo caso), ma considero ancora la manipolazione manuale dei puntatori UITextField in una sottoclasse e mi offende farlo in un ambiente di passaggio dei messaggi che è già capace di fare ciò che voglio. –

+0

Penso che stai rendendo la funzionalità della tastiera personalizzata in qualcosa che non è. Una tastiera personalizzata è solo una vista. Non è una sottoclasse speciale del framework della tastiera privata di Apple (una cosa grande e complicata) che ti dà dei ganci nel loro sistema. Immagina se hai creato una tastiera personalizzata in cui l'utente non preme i pulsanti per inserire il testo, ma invece disegna le immagini. In che modo il codice di inoltro chiave interno di Apple potrebbe inviare questi dati al campo di testo? – pe8ter

0

Sono nuovo per iOS, quindi per favore perdonami se quello che sto dicendo non ha senso (e sii gentile a correggermi, per favore). : D

Non esiste un modo per la tastiera personalizzata di passare attraverso tutti i campi UIText nel UIView principale alla ricerca di FistResponder e inviare i suoi messaggi a FirstResponder? Voglio dire, UIView ha una proprietà di sottoview in cui puoi cercare UITextFields e trovare FirstResponder usando la proprietà [UITextField isFirstResponder]. Quindi, potresti usare quell'oggetto?

Ancora una volta, mi dispiace se questo non ha senso, ma sono anche molto interessato a questa discussione e ho voluto contribuire un po '.

+0

Capisco quello che stai dicendo, ma non sono sicuro che sia meglio di quello che sto facendo. Devo già assegnare esplicitamente un'istanza concreta di una tastiera personalizzata a un campo di testo specifico. Quindi per me è un po 'Rube Goldberg avere la tastiera stessa che cerca attraverso lo stack di visualizzazione per trovare il primo risponditore. Per me ciò che manca è dare alla tastiera una conoscenza esplicita del campo di testo a cui è legato. –

Problemi correlati