我有这个UIAlertview标签,我试图用来调用一个函数。 fogotpassword警报视图显示,然后显示重置警报视图,但是当我尝试调用NSLog时(@“密码”);按下复位警报视图中的第一个按钮,它不会被调用。相反,重置警报视图按钮会再次弹出。我将不胜感激任何帮助。
-(void)viewDidLoad{
forgotPassword = [[UIAlertView alloc] initWithTitle:@"Login Error"
message:@"Your login credentials do not match"
delegate:self
cancelButtonTitle:@"Try Again"
otherButtonTitles: @"Forgot Password",nil];
[forgotPassword show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
forgotPassword.tag = 1;
resetPassword.tag = 2;
if (buttonIndex == 1 && forgotPassword.tag ==1)
{
resetPassword = [[UIAlertView alloc] initWithTitle: @"Forgot Password"
message:@"Email" delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Reset Password", nil];
[resetPassword setAlertViewStyle:UIAlertViewStylePlainTextInput];
[resetPassword show];
NSLog(@"RESET");
}
if (buttonIndex == 1 && resetPassword.tag == 2) {
NSLog(@"Password");
}
}
答案 0 :(得分:3)
你的逻辑全都搞砸了。您设置两个标记,以便两者始终为true。由于您似乎拥有两个不同警报视图的ivars,因此请删除标记并执行以下操作:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (alertView == forgotPassword) {
if (buttonIndex == alertView.firstOtherButtonIndex) {
// show other alert
}
else if (alertView == resetPassword) {
if (buttonIndex == alertView.firstOtherButtonIndex) {
// reset
}
}
}
答案 1 :(得分:1)
无需使用标记
尝试这种方式
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if(alertView==forgotPassword)
NSLog(@"forgotPassword alert");
}
答案 2 :(得分:0)
你的代码很混乱。您可以创建一个警报视图“forgotPassword”并显示它,而无需设置它的标记。然后,在alertView:clickedButtonAtIndex:方法中,您在两个警报视图上显式设置标记,然后询问这些警报视图以查看其标记是什么。这些标签永远不会改变。
相反,您应该在显示每个警报视图之前设置标记,然后检查传递给alertView:clickedButtonAtIndex:方法的UIAlertView标记。像这样:
-(void)viewDidLoad{
forgotPassword = [[UIAlertView alloc] initWithTitle:@"Login Error"
message:@"Your login credentials do not match"
delegate:self
cancelButtonTitle:@"Try Again"
otherButtonTitles: @"Forgot Password",nil];
forgotPassword.tag = 1;
[forgotPassword show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1 && alertView.tag ==1)
{
resetPassword = [[UIAlertView alloc] initWithTitle: @"Forgot Password"
message:@"Email" delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Reset Password", nil];
[resetPassword setAlertViewStyle:UIAlertViewStylePlainTextInput];
resetPassword.tag = 2;
[resetPassword show];
NSLog(@"RESET");
}
if (buttonIndex == 1 && alertView.tag == 2) {
NSLog(@"Password");
}
}
答案 3 :(得分:0)
您应该在方法中使用alertView.tag == 1和alertView.tag == 2。正如你现在所做的那样,只要buttonIndex == 1,if语句总是为true,因为你明确设置了forgetPassword.tag = 1和resetPassword.tag = 2,然后检查每个项目。
此外,您应该在viewDidLoad中设置标记,除非您有理由在每次按下alertView按钮时继续重置其值。
或者,Anand K说的更容易。
-Stephen
答案 4 :(得分:0)
你的代码是多余的,无论如何都没有意义.. 在这种情况下,您不需要将UIAlertView用作属性。 使用此:
-(void)viewDidLoad{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Login Error"
message:@"Your login credentials do not match"
delegate:self
cancelButtonTitle:@"Try Again"
otherButtonTitles: @"Forgot Password",nil];
alertView.tag = 1;
[alertView show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
if(alertView.tag == 1)
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: @"Forgot Password"
message:@"Email" delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Reset Password", nil];
[alertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
alertView.tag = 2;
[alertView show];
NSLog(@"RESET");
}
} else if (alertView.tag == 2) {
NSLog(@"Password");
}
}
这段代码很干净使用它;)