2013-08-29 2 views
1

Так что есть ситуации, когда я хочу, чтобы отобразить UIAlertView с alertViewStyle в UIAlertViewStylePlainTextInput, однако я хотел бы иметь его так, что, когда он появляется, он не показывает связанная с ним клавиатура. У кого-нибудь есть идея?Дисплей UIAlertView с UIAlertViewStylePlainTextInput, но не иметь его показать клавиатуру

P.S. Для того, как я хочу, чтобы это выглядело, продолжайте и покажите предупреждение в симуляторе с alertViewStyle = UIAlertViewStylePlainTextInput, а затем нажмите return. Я хочу, чтобы UIAlertView был сфокусирован по экрану.

+0

Почему вы не хотите клавиатуры вверх точно? –

+0

Выбор дизайна. –

ответ

1

Я только что нашел пару способов сделать это. Первым и самым грязным способом было бы сразу позвонить resignFirstResponder. Это уродливо, но оно работает.

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:@"Button", nil]; 
[alert setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
[alert show]; 
[[alert textFieldAtIndex:0] resignFirstResponder]; 

Второй вариант будет использовать протокол UITextFieldDelegate, в частности textFieldShouldBeginEditing:. Используя это и установив свой класс в качестве делегата текстового поля в предупреждении, вы можете просто вернуть NO и запретить отображение клавиатуры вообще.

Важно помнить, что если вы не предоставите какое-либо условие в этом методе, вы не сможете редактировать текстовое поле.

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:@"Button", nil]; 
[alert setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
[[alert textFieldAtIndex:0] setDelegate:self]; 
[alert show]; 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    return NO; 
} 
+0

Я пробовал это, и я заметил, что это не центрирует UIAlertView на экране в симуляторе. Это верно и для вас? –

0

Это только теория и не проверял: -

  1. Создать UIAlertView
  2. Выполнить что-то вроде следующего: -

    for(UIView *view in [alertView subViews]) 
    { 
    if([view isKindOfClass:[UITextField class]) 
    { 
    view.delegate=self 
    } 
    } 
    
  3. реализовать метод

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
    { 
        return NO; 
    } 
    
  4. показать alertview

0
for(UIView *view in alert.subviews) 
    { 
     if([view isKindOfClass:[UITextField class]]) 
     { 
      UITextField *aux=(UITextField *)view; 
      [email protected]"text"; 
     } 
    } 

работает в iOS6, но не работает в IOS7

1
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" 
               message:@"") 
               delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"OK", nil]; 

alert.alertViewStyle = UIAlertViewStylePlainTextInput; 


UITextField *textField = [alert textFieldAtIndex:0]; 
textField.text = @"your text"; 
[alert show]; 

работает на iOS6 и IOS7

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