AlertView上的TextField未在iOS 7上显示

use*_*570 4 uitextfield uialertview ios ios7

在iOS7之前,我可以使用此代码UITextField向我添加(文本输入字段)UIAlertView.

UITextField *txtNewPassword = [[UITextField alloc] initWithFrame:secondTextFldRect];

        txtNewPassword.delegate     = self;
        txtNewPassword.text         = @"";
        txtNewPassword.clearButtonMode = UITextFieldViewModeWhileEditing;
        txtNewPassword.borderStyle      = UITextBorderStyleRoundedRect;
        txtNewPassword.autocapitalizationType = UITextAutocapitalizationTypeNone;
        txtNewPassword.tag              = kNewPasswordTxtFldTag;
        [txtNewPassword setBackgroundColor:[UIColor whiteColor]];
        [txtNewPassword setKeyboardAppearance:UIKeyboardAppearanceAlert];
        [txtNewPassword setAutocorrectionType:UITextAutocorrectionTypeNo];
        [txtNewPassword setPlaceholder:@"New password"];
        [txtNewPassword setTextAlignment:UITextAlignmentLeft];
        [txtNewPassword setSecureTextEntry:YES];
        [alert addSubview:txtNewPassword];
        [txtNewPassword release];
Run Code Online (Sandbox Code Playgroud)

更新到iOS7后,它停止工作 - 我的文本字段不再显示.更新代码的建议方法是什么?

Mat*_*uch 7

您想使用UIAlertView的"新"(i​​OS 5)方法为您提供UITextField.alertViewStyletextFieldAtIndex:

这会减少您的代码:

UIAlertView *alert = [[UIAlertView alloc] ...];
alert.alertViewStyle = UIAlertViewStyleSecureTextInput;

UITextField *txtNewPassword = [alert textFieldAtIndex:0];

txtNewPassword.delegate     = self;
txtNewPassword.text         = @"";
txtNewPassword.clearButtonMode = UITextFieldViewModeWhileEditing;
txtNewPassword.tag              = kNewPasswordTxtFldTag;
[txtNewPassword setPlaceholder:@"New password"];
Run Code Online (Sandbox Code Playgroud)

您的代码在iOS7上不起作用,因为从未允许将子视图添加到UIAlertView .视图层次结构始终是私有的.Apple开始执行此限制.

如果你想要一个定制的UIAlertView,你必须自己编写.子类UIView并使其看起来像UIAlertView.


Sar*_*han 7

UIAlertView* dialog = [[UIAlertView alloc] init];
[dialog setDelegate:self];
dialog.alertViewStyle=UIAlertViewStylePlainTextInput;
[dialog setTitle:@"Your Title"];
[dialog setMessage:@"your message"];

[dialog addButtonWithTitle:@"Cancel"];
[dialog addButtonWithTitle:@"Ok"];


UITextField *_UITextField  = [dialog textFieldAtIndex:0];
_UITextField.placeholder = @"Placeholder";
_UITextField.keyboardType = UIKeyboardTypeEmailAddress;
[dialog show];

//uialertview delegate method
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if(buttonIndex==1)//OK button 
    {
        //do ur stuff
    }
}
Run Code Online (Sandbox Code Playgroud)