我使用以下代码创建UIAlertView
并在其上添加一些组件,但结果位于图片上:(((image is here:http://i.stack.imgur.com/DTg02.png)
-(IBAction)login:(id)sender
{
UIAlertView *login = [[UIAlertView alloc]initWithTitle: @"Login first"
message:@"enter username and password please first" delegate:self cancelButtonTitle:@"cancel"otherButtonTitles:@"OK", nil];
k = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 70.0, 200.0, 25.0)]; //<< it also displays wrong without this line
k.text = @"";
k.backgroundColor = [UIColor whiteColor];
k.clearButtonMode= UITextFieldViewModeWhileEditing;
k.keyboardType = UIKeyboardTypeAlphabet;
k.keyboardAppearance = UIKeyboardAppearanceAlert;
p = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 100.0, 200.0, 25.0)];
p.text = @"";
p.backgroundColor = [UIColor whiteColor];
p.clearButtonMode = UITextFieldViewModeWhileEditing;
p.keyboardType = UIKeyboardTypeAlphabet;
p.keyboardAppearance = UIKeyboardAppearanceAlert;
[login addSubview:k];
[login addSubview:p];
[login show];
}
答案 0 :(得分:2)
如果要在UIAlertView上添加多个textField和Multiple Button,请按照以下步骤操作:
第1步:
@interface ViewController ()<UIAlertViewDelegate>
{
UITextField *textFieldOne,*textFieldTwo,*textFieldThird;
}
第2步:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Multiple TextField" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
[alert addButtonWithTitle:@"CANCEL"];
alert.delegate=self;
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
textFieldOne=[[UITextField alloc]initWithFrame:CGRectMake(5, 0, 150, 20)];
[textFieldOne setPlaceholder:@"First Name"];
[myView addSubview:textFieldOne];
textFieldTwo=[[UITextField alloc]initWithFrame:CGRectMake(5,25, 150, 20)];
[textFieldTwo setPlaceholder:@"Middle Name"];
[myView addSubview:textFieldTwo];
textFieldThird=[[UITextField alloc]initWithFrame:CGRectMake(5,50, 150, 20)];
[textFieldThird setPlaceholder:@"Last Name"];
[myView addSubview:textFieldThird];
[alert setValue:myView forKey:@"accessoryView"];
[alert show];
第3步:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"YES"])
{
NSLog(@"Button YES");
NSLog(@"TextFiledOne Text = %@",textFieldOne.text);
NSLog(@"TextFiledTwo Text = %@",textFieldTwo.text);
NSLog(@"TextFiledThree Text = %@",textFieldThird.text);
}
else if([title isEqualToString:@"NO"])
{
NSLog(@"Button NO");
}
else
{
NSLog(@"Cancel is click");
}
}
答案 1 :(得分:0)
没有考虑额外的文字输入UIAlertView
。您可以使用UIActionSheet
来解释here。
答案 2 :(得分:0)
不要去做所有的诈唬。只需使用以下代码:
[login setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
要处理用户的输入,请使用:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if([[alertView textFieldAtIndex:0].text isEqual:@"UserName"]&&[[alertView textFieldAtIndex:1].text isEqual:@"PassWord"])
{
//do your stuff here
[adminLoginButton setTitle:@"Logout" forState:UIControlStateNormal];
[adminLoginButton setImage:[UIImage imageNamed:@"Logout.png"] forState:UIControlStateNormal];
}
else
{
UIAlertView *errorMessage = [[UIAlertView alloc]initWithTitle:@"Authentication Error" message:@"Input is wrong" delegate:self cancelButtonTitle:@"Okay" otherButtonTitles: nil];
[errorMessage show];
}
}
答案 3 :(得分:0)
没有必要添加已经添加到此处的代码,因为它已经足够好并且有一些很好的替代方案。我要做的是告诉您为什么不应该使用UITextField
将自己的UIAlertView
添加到addSubview:
。
基本上Apple已经使用UIAlertView
类as is
,并且此类的视图层次结构是私有的。
子类注释
UIAlertView类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。
从UIAlertView
Apple documentation获取的子类注释。
从本质上讲,这意味着如果你在addSubview:
上使用UIAlertView
方法,那么你实质上是在修改Apple所说的私有内容,而你的应用会被苹果拒绝规则 2.5 的应用审核流程。
2.5 使用非公开API的应用将被拒绝
你可能会问自己,为什么这种方法甚至存在于UIAlertView
,因为我们可以使用它。那么 NO 原因是因为UIAlertView
类本身是UIView
的子类,而addSubview:
方法是声明的UIAlertView
方法。不幸的是,没有理由阻止实际调用该方法的addSubview:
实例。所以Apple所做的是他们已经覆盖了[super addSubview:view];
方法,它所做的就是返回。因此,此方法不会执行任何操作,并且您传递给此方法的任何视图都将永远不会被添加,因为它从不调用UIAlertView
。
所以当谈到UIAlertView
时,你不应该做两件事,这些是:
子类 @interface MYAlertView : UIAlertView
,如[alertView addSubview:view];
这是子类化,不允许。
更改视图层次结构,例如UIAlertView
然而,我应该提出一点,虽然我们不允许继承@interface UIAlertView (MyCategory)
,我们仍然可以像iOS8
一样为它制作类别,因为它不被归类为子类化它是已知的作为类类别或类扩展(我之前也听说它叫做类提供者)。
还应注意,如果您正在为UIAlertController
及更高版本进行开发,则应使用UIAlertView
,因为UIAlertController
已被弃用。
重要:强>
UIAlertView在iOS 8中已弃用。(请注意,UIAlertViewDelegate也已弃用。)要在iOS 8及更高版本中创建和管理警报,请使用UIAlertController,其优先级为UIAlertControllerStyleAlert。
因此,我要么使用其他答案中提到的其中一个自定义类,要么使用UIAlertView
或者如果您有时间制作自己的自定义提醒视图。
我希望这个解释可以帮助您更好地理解UNION ALL
。