2012-06-26 12 views

risposta

14

È possibile creare una vista accessi di input che può visualizzare un UIToolBar sopra la tastiera e quindi aggiungere un pulsante di annullamento a questa. Dai un'occhiata al link alla documentazione sottostante per la proprietà inputAccessoryView.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html

Questo è un esempio di quello che ho fatto per una TextView. Il metodo di creazione della vista Accessory di input è chiamato da "textViewDidBeginEditing". Quindi crea la vista accessi di input e nel mio caso aggiunge tre pulsanti e una barra spaziatrice.

Spero che questo aiuti.

-(void)textViewDidBeginEditing:(UITextView *)textView { 

[self createInputAccessoryView]; 
[textView setInputAccessoryView:_inputAccessoryView]; 
self.myTextView = textView; } 

-(void)createInputAccessoryView { 

_inputAccessoryView = [[UIToolbar alloc] init]; 
_inputAccessoryView.barStyle = UIBarStyleBlackOpaque; 
[_inputAccessoryView sizeToFit]; 

_inputAccessoryView.frame = CGRectMake(0,_collageView.frame.size.height - 44, _collageView.frame.size.width, 44); 

UIBarButtonItem *fontItem = [[UIBarButtonItem alloc] initWithTitle:@"Font" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(changeFont:)]; 
UIBarButtonItem *removeItem = [[UIBarButtonItem alloc] initWithTitle:@"Remove" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(removeTextView:)]; 
//Use this to put space in between your toolbox buttons 
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                      target:nil 
                      action:nil]; 
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                  style:UIBarButtonItemStyleDone 
                  target:self action:@selector(dismissKeyBoard:)]; 

NSArray *items = [NSArray arrayWithObjects:fontItem,removeItem,flexItem,doneItem, nil]; 
[_inputAccessoryView setItems:items animated:YES]; 
[_myTextView addSubview:_inputAccessoryView]; 
} 
+0

Grazie per questo, sebbene se stessimo semplicemente facendo un pulsante di annullamento, non metteremo un 'UIBarButtonItem' di annullamento accanto a 'UITextField' compire la stessa cosa senza una vista accessoria? –

+0

Vieni a pensarci, è esattamente quello che vorrei fare. Questa è davvero una buona risposta e risolverà definitivamente il mio problema, lo contrassegnerò come accettato allora. –

+0

@kevinhorgan perché non hai assegnato direttamente self.myTextView alla proprietà di input? – Camus

0

Andrew, come va? è Dima R!

Per quanto ne so, non esiste un ottimo modo per fare ciò che si sta tentando di fare. Si può facilmente scegliere da uno dei costruita nel tipi elencati here

typedef enum { 
    UIReturnKeyDefault, 
    UIReturnKeyGo, 
    UIReturnKeyGoogle, 
    UIReturnKeyJoin, 
    UIReturnKeyNext, 
    UIReturnKeyRoute, 
    UIReturnKeySearch, 
    UIReturnKeySend, 
    UIReturnKeyYahoo, 
    UIReturnKeyDone, 
    UIReturnKeyEmergencyCall, 
} UIReturnKeyType; 

Che cosa si potrebbe fare è aggiungere una vista sulla parte superiore della tastiera che contiene il pulsante di cancellazione, o cercare di attraversare attraverso la gerarchia vista e sovrapponi quello che vuoi sul pulsante in questo modo (sebbene questo metodo sia inaffidabile). Sfortunatamente, questa è una cosa che Apple non ha ancora fornito molte personalizzazioni.

modifica: In realtà penso di aver letto erroneamente la tua domanda sin dall'inizio, dal momento che non vorrai comunque un pulsante Annulla come tasto di ritorno principale. In questo caso, la vista degli accessori di input è decisamente la strada da percorrere.

+1

Whoa che ritorno, bello vederti qui amico. E grazie per la risposta. Sì, mi piacerebbe dare all'utente un pulsante di cancellazione in più, nel caso in cui volessero cancellare l'input di testo. –

+1

La risposta di Kevin Horgan è quella che vuoi, è il modo corretto per farlo. – Dima

1

Ho appena caduto un UIToolbar nel mio punto di vista controllore in Interface Builder, quindi:

@property IBOutlet UIToolbar *keyboardAccessory; 

-(void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    // this is so I can edit it in Interface Builder, but it doesn't show in the view 
    [keyboardAccessory removeFromSuperview]; 
} 

-(BOOL) textFieldShouldBeginEditing:(UITextField*)textField { 
    textField.inputAccessoryView = keyboardAccessory; 
    return YES; 
} 

-(IBAction) pressedCancelButton { 
    [self.view endEditing:YES]; 
} 

Voila!

Problemi correlati