2012-06-26 1 views

ответ

14

Вы можете создать внешний вид входа, который может отображать UIToolBar над клавиатурой, а затем добавить к нему кнопку отмены. Посмотрите ссылку на документацию ниже для свойства inputAccessoryView.

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

Это пример, который я сделал для 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]; 
} 
+0

Благодарим за это, хотя, если вы просто делали кнопку отмены, не помещали бы отмену 'UIBarButtonItem' рядом с' UITextField' выполняли то же самое без аксессуаров? –

+0

Подумайте об этом, это именно то, что я буду делать. Это действительно хороший ответ, хотя, и это определенно решает мою проблему, собираюсь отметить ее как принятую тогда. –

+0

@kevinhorgan Почему вы не сразу присвоили self.myTextView входному свойству? – Camus

0

Андрей, как дела? это Дима Р!

Насколько я знаю, нет отличного способа сделать то, что вы пытаетесь сделать. Вы можете легко выбрать один из встроенных типов, которые перечислены here

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

Что вы можете сделать, это либо добавить вид на верхней части клавиатуры, которая содержит вашу кнопку отмены или попытаться пройти через иерархию представления и накладывать то, что вы хотите на кнопку таким образом (хотя этот метод ненадежен). К сожалению, это одна вещь, на которую Apple пока не дала много настроек.

Редактировать: На самом деле, я думаю, что я неправильно прочитал ваш вопрос с самого начала, так как вы не хотите, чтобы кнопка отмены в качестве основной кнопки возврата в любом случае. В этом случае вид входного аксессуара - это, безусловно, путь.

+1

Эй, какой возврат, приятно тебя видеть здесь, чувак. И спасибо за ответ. Да, я хотел бы дать пользователю дополнительную кнопку отмены, если они хотят отменить ввод текста. –

+1

Ответ Кевина Хоргана - тот, который вы хотите, это правильный способ достичь этого. – Dima

1

Я просто бросил 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]; 
} 

вуаля!