使用UIAlertViewStylePlainTextInput显示UIAlertView,但不要显示键盘

时间:2013-08-29 18:38:47

标签: ios ios6 uialertview uikeyboard

所以我有一种情况,我希望UIAlertView显示alertViewStyleUIAlertViewStylePlainTextInput,但是我希望这样做,以便当它显示时,它不会显示与之相关的键盘。有没有人有想法?

P.S。对于我希望它的外观,请继续使用alertViewStyle = UIAlertViewStylePlainTextInput在模拟器中显示警报视图,然后按回车键。我希望UIAlertView在屏幕上居中。

4 个答案:

答案 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;
}

答案 1 :(得分: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的工作

答案 2 :(得分: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. show alertview

答案 3 :(得分:0)

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

适用于IOS6但不适用于IOS7