2012-01-09 22 views
18

Sto costruendo un'applicazione con un'interfaccia personalizzata per l'immissione di testo e utilizzavo una UILabel per la visualizzazione. È diventato quindi necessario che l'utente fosse in grado di copiare e incollare il testo, quindi sono andato con un UITextField.Funzionalità UITextField senza tastiera

Il problema che ho è che non riesco a capire come ottenere UITextField per consentire la selezione, copia, incolla, ecc, ma non hanno nessuna tastiera visualizzata quando il campo è selezionato.

Ho letto numerosi post simili a questo, ma nessuno chiede esattamente la stessa cosa, e nessuna delle soluzioni funziona per me. Ho provato a rendere il campo non modificabile, cosa che blocca la tastiera, ma non consente di copiare e incollare. Ho letto anche commenti che suggeriscono la sottoclasse dell'UITextField, ma nessuno di quelli che ho letto ha fornito esempi concreti.

Può quello che voglio essere fatto semplicemente, o devo fare il percorso di creazione di una vista personalizzata per la tastiera, o altre opzioni?

Grazie, Andrew

Soluzione:

Alla fine, ho scoperto un altro simile (ma non esatto) domanda qui su StackOverflow, e una risposta ha dato una soluzione al mio problema. Il modo per farlo è semplicemente avere l'app visualizzare una vista fittizia come tastiera, e tutto il resto funziona come dovrebbe.

Funziona per UITextField e UITextView e devono essere impostati su modificabili.

risposta

24

Soluzione:

Alla fine, ho scoperto un altro simile (ma non esatto) domanda qui su StackOverflow, e una risposta ha dato una soluzione al mio problema. Il modo per farlo è semplicemente avere l'app visualizzare una vista fittizia come tastiera, e tutto il resto funziona come dovrebbe.

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

funziona per UITextField e UITextView e hanno bisogno di essere impostato su modificabile.

+0

Se lo fai in iOS 7, ottieni una riga bianca come questa domanda http://stackoverflow.com/questions/20946524/white-line-on-the-bottom-on-ios-7-with-uitextfield .Do conosci la soluzione per questo? – deltaaruna

+1

Sembra che qualcuno abbia risposto a questa domanda, suggerendo che il problema con 1 pixel è il problema, e questo potrebbe risolverlo: CGRectMake (0, 0, 0, 0). –

+0

U può usare [UIView new] per creare una vista con zero frame. – Dren

1

Imposta come UITextView e rende UITextView non modificabile. Ciò permetterà comunque di copiare.

EDIT: Sì, il mio male ho dimenticato quella parte ... Fondamentalmente quello che hai fatto è stato creare un'etichetta scorrevole.

Se si desidera disporre di tutte le funzionalità senza tastiera, è necessario renderlo modificabile e modificare UITextFieldDelegate da -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField a return NO. Questo bloccherà la tastiera dall'avvio.

+1

Grazie. Questo ha fatto il trucco. Molto apprezzato dopo molte ricerche e nulla di quello che ho potuto trovare per indicare UITextView sarebbe stato meglio. –

+0

Quando l'ho implementato per la prima volta, ho pensato che andasse bene. Ora, tuttavia, quando guardo di nuovo, sono solo in grado di copiare. Incollare non è consentito, probabilmente perché è una modifica. Qualche altro pensiero? –

+0

Modificato sopra ... – DGund

9

codice dell'autore ...

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

(Dove 'VIN' è la variabile UITextField, e questo codice è collocato in un posto come viewDidLoad)

... non lavoro per prevenire l'iPhone/Tastiera popup di iPad da visualizzare.

TUTTAVIA, questa è solo la parte "display" dell'interfaccia di una tastiera. Se hai una tastiera esterna collegata come la tastiera fisica iPhone/iPad di Apple che si collega alla tastiera a 30 pin o a una zillion con tecnologia Bluetooth (o anche usando la tastiera Mac con simulatore), l'utente può comunque digitare nel campo SENZA la mostra la visualizzazione popup della tastiera.

Inoltre, anche senza la visualizzazione della tastiera visualizzata, l'utente sarebbe comunque in grado di INCOLLARE dalla scheda di inserimento nel campo toccando due volte il campo e selezionando INCOLLA.

Il seguente codice addizionale impedisce quelli tastiera l'uso e previene PASTE vedere:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSLog(@"myXViewController shouldChangeCharactersInRange"); 
    return FALSE; 
} 

...e consente comunque la selezione, ma non la modifica del testo nel campo.

+1

Un buon punto sulla tastiera esterna: certamente una considerazione in alcuni casi. Per quanto riguarda la funzionalità Incolla, era questo il punto cruciale della domanda: nascondere la tastiera e consentire comunque le funzioni di copia/incolla. –

+0

Grazie per, ** Dove 'VIN' è la variabile UITextField, e questo codice è posto in qualche posto come viewDidLoad) ** !! – rptwsthi

0

Sto usando [textfield resignFirstResponder] nel metodo delegato - (void)textFieldDidBeginEditing:(UITextField *)textField come questo:

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    if (textField == yourTextField){ 
     [yourTextfield resignFirstResponder]; 
    } 
} 

Così tastiera appena non hanno tempo per apparire

Problemi correlati