8

问题- 我想要一个 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,它们给了我想要的结果,但我担心它可能会导致我的应用程序被拒绝。

那么,有什么解决办法吗?

4

5 回答 5

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);
}
于 2012-11-29T19:50:58.747 回答
4

y==400 大约是手机屏幕的底部。我想,UIAlertView 从未期望添加子视图或设置它的框架,重置它的框架要居中。你能把最后一行注释掉,看看会发生什么吗?

于 2012-04-30T19:54:13.907 回答
4

只需将 show 语句移到您设置警报框架的位置下方

于 2012-04-30T19:54:42.017 回答
2

我在我的应用程序中使用DDAlertPrompt。这很容易,而且是一个临时课程。

于 2012-04-30T20:37:16.207 回答
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;
于 2014-07-08T09:55:36.533 回答