Есть ли способ добавить кнопку отмены на клавиатуру, отображаемую для UITextField
? Оглядываясь на ссылку UITextInputTraits
Protocol Reference, я ничего не мог найти, включая тестирование разных типов клавиатуры.Добавление кнопки отмены на клавиатуру UITextField
ответ
Вы можете создать внешний вид входа, который может отображать UIToolBar над клавиатурой, а затем добавить к нему кнопку отмены. Посмотрите ссылку на документацию ниже для свойства inputAccessoryView.
Это пример, который я сделал для TextView. Метод Create Input Accessory View вызывается из «textViewDidBeginEditing». Затем он создает входной вид аксессуара и в моем случае добавляет три кнопки и пробел.
Я надеюсь, что это поможет.
-(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];
}
Андрей, как дела? это Дима Р!
Насколько я знаю, нет отличного способа сделать то, что вы пытаетесь сделать. Вы можете легко выбрать один из встроенных типов, которые перечислены here
typedef enum {
UIReturnKeyDefault,
UIReturnKeyGo,
UIReturnKeyGoogle,
UIReturnKeyJoin,
UIReturnKeyNext,
UIReturnKeyRoute,
UIReturnKeySearch,
UIReturnKeySend,
UIReturnKeyYahoo,
UIReturnKeyDone,
UIReturnKeyEmergencyCall,
} UIReturnKeyType;
Что вы можете сделать, это либо добавить вид на верхней части клавиатуры, которая содержит вашу кнопку отмены или попытаться пройти через иерархию представления и накладывать то, что вы хотите на кнопку таким образом (хотя этот метод ненадежен). К сожалению, это одна вещь, на которую Apple пока не дала много настроек.
Редактировать: На самом деле, я думаю, что я неправильно прочитал ваш вопрос с самого начала, так как вы не хотите, чтобы кнопка отмены в качестве основной кнопки возврата в любом случае. В этом случае вид входного аксессуара - это, безусловно, путь.
Эй, какой возврат, приятно тебя видеть здесь, чувак. И спасибо за ответ. Да, я хотел бы дать пользователю дополнительную кнопку отмены, если они хотят отменить ввод текста. –
Ответ Кевина Хоргана - тот, который вы хотите, это правильный способ достичь этого. – Dima
Я просто бросил UIToolbar
в мой контроллер представления в Interface Builder, а затем:
@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];
}
вуаля!
Благодарим за это, хотя, если вы просто делали кнопку отмены, не помещали бы отмену 'UIBarButtonItem' рядом с' UITextField' выполняли то же самое без аксессуаров? –
Подумайте об этом, это именно то, что я буду делать. Это действительно хороший ответ, хотя, и это определенно решает мою проблему, собираюсь отметить ее как принятую тогда. –
@kevinhorgan Почему вы не сразу присвоили self.myTextView входному свойству? – Camus