2015-07-29 2 views
1

Я пробую очень простой пример. Я добавляю текстовое представление и кнопку к виду контроллера вида. Когда кнопка нажата, она отображает предупреждение с текстовым полем.Показать UIAlertController с UITextField без отклонения клавиатуры

Мой вопрос заключается в следующем:

Пусть я редактирую на текстовом и нажмите на кнопку, чтобы показать предупредительного вид. Клавиатура сначала уволит (текстовое представление сбрасывает первый ответчик), а затем снова появляется (текстовое поле становится первым ответчиком). Это действительно раздражает. Я хочу посмотреть, могу ли я что-то сделать, чтобы клавиатура не отключалась и оставалась, когда я переключаюсь с текстового поля на текстовое поле. Спасибо вам всем.

Вот некоторые коды этого простого примера:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Text view 
    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(100, 100, 300, 300)]; 
    textView.backgroundColor = [UIColor greenColor]; 
    [self.view addSubview:textView]; 

    // Button 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(100,500, 200, 100); 
    [button setTitle:@"Show alert view" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:button]; 
} 

-(void)buttonPressed { 
    UIAlertController *ac = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {}]; 
    [ac addAction:cancelAction]; 
    [ac addTextFieldWithConfigurationHandler:^(UITextField *textField) {}]; 
    [self presentViewController:ac animated:YES completion:nil]; 
} 
+1

Я не думаю, что вы можете сделать, за исключением того, что вы используете пользовательские клавиатуры –

ответ

-1

Реализовать UITextFieldDelegate Protocol и добавить этот метод к контроллеру:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
     return NO; 
} 

Это должно предотвратить клавиатуру от увольнения.

+0

textFieldShouldReturn не называется. Вызывается другие методы делегатов, такие как textFieldDidBeginEditing. Поэтому я считаю, что делегат не ноль. –

0

На основании этого ответа: Keyboard hide and show again...

Я думаю, вы можете просто добавить эти строки в конце файла .m, и он должен делать эту работу!

// UI AlertController Category 
@interface UIAlertController (NonFirstResponder) 
@end 

@implementation UIAlertController (NonFirstResponder) 
- (BOOL)canBecomeFirstResponder 
{ 
    return NO; 
} 
@end 

// UIAlertAction Category 
@interface UIAlertAction (NonFirstResponder) 
@end 

@implementation UIAlertAction (NonFirstResponder) 
- (BOOL)canBecomeFirstResponder 
{ 
    return NO; 
} 
@end 
+0

Не работает. Когда отображается представление предупреждения, клавиатура немного опускается (пытается уволить), а затем быстро возвращается в исходное положение. –

+0

Это из-за анимации при представлении UIAlertController! Вы можете отключить его с помощью '[self presentViewController: ac animated: NO complete: nil];' но я думаю, что на вашем экране появится быстрая тень. Важно понимать, что UIAlertController - это контроллер представлений, который находится наверху. Так, может быть, проще закодировать пользовательский UIView, который выглядит как UIAlertView с UITextField ?! Также я не знаю, что вы хотите сделать, но, возможно, лучшее решение UX/UI ... –

Смежные вопросы