带有两个TextFields和两个按钮的UIAlertView

时间:2012-04-30 19:46:02

标签: iphone objective-c ios uialertview

问题 - 我想要一个包含标题的UIAlertView,两个带占位符和两个按钮的文本字段。 到目前为止我做了什么 - 我已经使用了这段代码,我得到的确切的UIAlertView包含了我提到的所有这些但当视图加载时似乎首先出现在底部然后来了进入视图的中间。

    -(void)showalert{
    disclaimerAgreedAlertView = [[UIAlertView alloc] initWithTitle:@"   " 
                                                           message:@"    " 
                                                          delegate:self 
                                                 cancelButtonTitle:@"Cancel" 
                                                 otherButtonTitles:@"Login", nil];

    userNameTextField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 15.0, 245.0, 25.0)];
    userNameTextField.delegate=self;
    [userNameTextField setBackgroundColor:[UIColor whiteColor]];
    [userNameTextField setKeyboardType:UIKeyboardTypeDefault];
    userNameTextField.placeholder=@"Username";
    userNameTextField.secureTextEntry=NO;
    [disclaimerAgreedAlertView addSubview:userNameTextField];


    passwordTextField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
    passwordTextField.delegate=self;
    [passwordTextField setBackgroundColor:[UIColor whiteColor]];
    [passwordTextField setKeyboardType:UIKeyboardTypeDefault];
    passwordTextField.placeholder=@"Password";
    passwordTextField.secureTextEntry=YES;
    [disclaimerAgreedAlertView addSubview:passwordTextField];

    disclaimerAgreedAlertView.tag=99;

    [disclaimerAgreedAlertView show];
    disclaimerAgreedAlertView.frame= CGRectMake(5, 400, 320, 160);

}

然后我尝试了一些未记录的api,它们给了我想要的结果,但我担心它可能会导致我的应用被拒绝。

那么,对此有什么解决方案吗?

5 个答案:

答案 0 :(得分:61)

从iOS 5开始,可以使用UIAlertView的属性 alertViewStyle 来获取不同类型的警报视图,也可以使用文本字段。

可能的值:

  • UIAlertViewStyleDefault
  • UIAlertViewStyleSecureTextInput
  • UIAlertViewStylePlainTextInput
  • UIAlertViewStyleLoginAndPasswordInput

您可以使用 UIAlertViewStyleLoginAndPasswordInput 来获取带有两个文本字段的UIAlertView,然后您可以自定义textFields的一些属性:

 UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Your_Title" message:@"Your_message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[av setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];

// Alert style customization 
[[av textFieldAtIndex:1] setSecureTextEntry:NO];
[[av textFieldAtIndex:0] setPlaceholder:@"First_Placeholder"];
[[av textFieldAtIndex:1] setPlaceholder:@"Second_Placeholder"];
[av show];

您可以访问UIAlertViewDelegate的 alertView:clickedButtonAtIndex:上的文本字段的值。

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
     NSLog(@"1 %@", [alertView textFieldAtIndex:0].text);
     NSLog(@"2 %@", [alertView textFieldAtIndex:1].text);
}

答案 1 :(得分:4)

y == 400是关于手机屏幕的底部。我想,UIAlertView从未期望添加子视图或它的框架设置,重置它的框架要居中。你可以评论最后一行并看看会发生什么吗?

答案 2 :(得分:4)

只需移动设置警报框架

的show语句

答案 3 :(得分:2)

我在我的应用程序中使用DDAlertPrompt。这很简单,也是一个简单的课程。

答案 4 :(得分:2)

我出于同样目的使用以下

-(void)alertView {
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@""
                                                 message:@"Enter User & Password"
                                                delegate:self
                                       cancelButtonTitle:@"Cancel"
                                       otherButtonTitles:@"Login", nil];


alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
UITextField * alertTextField1 = [alert textFieldAtIndex:0];
alertTextField1.keyboardType = UIKeyboardTypeDefault;
alertTextField1.placeholder = @"User";

UITextField * alertTextField2 = [alert textFieldAtIndex:1];
alertTextField2.keyboardType = UIKeyboardTypeDefault;
alertTextField2.placeholder = @"Password";


[alert show];

}

如果您未在第二个文本字段中使用安全字符,请添加

alertTextField2.secureTextEntry=NO;