textField不会显示在alertView中

时间:2014-07-25 09:09:18

标签: objective-c cocoa-touch ios7 uialertview ios7.1

这是我的代码:

UIAlertView *theAlert = [[UIAlertView alloc] initWithTitle:@"Alert" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];

UITextField *textField = [[UITextField alloc] initWithFrame: CGRectMake(12, 45, 260, 30)];
[textField setBackgroundColor: [UIColor clearColor]];
textField.borderStyle = UITextBorderStyleRoundedRect;

[theAlert addSubview:textField];

[theAlert show];
[textField release];
[theAlert release];

alertView中没有textFiled,只有标题" Alert"和一个按钮" OK"

5 个答案:

答案 0 :(得分:1)

我会就UIAlertView Class Reference向您推荐Apple文档。具体来说

  

子类注释

     

UIAlertView类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改

所以这意味着您无法将子视图添加到UIAlertView的实例中,最近的UIAlertView仍有addSubview:方法,因为UIAlertView是一个具有此方法的UIView的子类,但从iOS7开始,addSubview:的方法UIAlertView不再调用UIView上的超级方法,它只是什么都不做。

所以基本上你所追求的是不可能的。

但是alertViewStyle可以使用UIAlertViewStylePlainTextInputUITextField会向UIAlertView添加一个textFieldAtIndex:,然后您可以使用{{1}方法访问UIAlertView }}。但请注意,您无法再对此做任何事情,因为它是UIAlertView层次结构的一部分,因此它再次按原样使用。

使用{{1}}层次结构进行混乱会使您的应用在

下的Apple Review流程中被拒绝
  

2.5 - 使用非公开API的应用将被拒绝

答案 1 :(得分:0)

你的背景颜色很清晰,所以没有显示

 [textField setBackgroundColor: [UIColor redColor]];.

并显示默认文本字段

theAlert.alertViewStyle = UIAlertViewStylePlainTextInput;

//or for username and password 
  theAlert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;

//   or for   password
 theAlert.alertViewStyle = UIAlertViewStyleSecureTextInput;

试试这个

答案 2 :(得分:0)

或者您可以设置alert.alertViewStyle = UIAlertViewStylePlainTextInput;

这将为您添加一个文本字段。你可以在中访问它  UIAlertView使用

委托回调

UITextField *textField = [alertView textFieldAtIndex:0];

答案 3 :(得分:0)

您可以将默认的alertView与textfield一起使用。为此您需要设置alertViewStyle

[message setAlertViewStyle:UIAlertViewStylePlainTextInput];

此消息是alertView的对象。

您可以使用委托方法获取文本字段值,如下所示

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];

    if([title isEqualToString:@"Login"]) {
        UITextField *username = [alertView textFieldAtIndex:0];
        UITextField *password = [alertView textFieldAtIndex:1];

        NSLog(@"Username: %@\nPassword: %@", username.text, password.text);
    }
}

答案 4 :(得分:-4)

如果您使用ios 7,请将以下代码添加到您的代码集

 theAlert.alertViewStyle=UIAlertViewStylePlainTextInput;

完整代码

UIAlertView *theAlert = [[UIAlertView alloc] initWithTitle:@"Alert" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
UITextField *textField = [[UITextField alloc] initWithFrame: CGRectMake(12, 45, 260, 30)];
[textField setBackgroundColor: [UIColor greenColor]];
textField.borderStyle = UITextBorderStyleRoundedRect;
theAlert.alertViewStyle=UIAlertViewStylePlainTextInput;

[theAlert show];