viewWillAppear UIAlertView没有显示

时间:2015-01-01 20:18:38

标签: ios objective-c uialertview uialertviewdelegate

我有两个不同的视图控制器,一个用于仪表板,另一个用于注册。我不希望用户能够与仪表板上的任何内容进行交互,直到用户通过警报视图登录。因此,每当用户导航回仪表板或按下取消并且他们没有登录时,我希望弹出登录警报。

这在所有情况下都能很好地工作,包括当用户点击注册视图中导航栏上的后退按钮时,但当用户在注册页面的警报上单击“确定”时不起作用。

仪表板视图包含以下代码:

@property(strong) UIAlertView * alert;
//...
-(void)viewWillAppear:(BOOL)animated
{
    user_email = [[NSUserDefaults standardUserDefaults] stringForKey:@"email"];
    if ( user_email==nil ){
        [self auto_login];
    } else //...
}

-(void)auto_login
{
     alert = [[UIAlertView alloc] initWithTitle:@"Login" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login",@"Forgot Password",@"Register",nil];
     alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
     [alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    switch (buttonIndex) {
        case 0:
        {
            self.debug.text = @"Cancel";
            [self auto_login];
            break;
        }
        //...
        default:
        {
            self.debug.text = @"Register";
            [self nav_register];
            break;
        }
    }
}

-(void)nav_register
{
    RegisterProfileController *rvc = [[RegisterProfileController alloc] init];
    [self.navigationController pushViewController:rvc animated:YES];
}

注册视图控制器包含以下代码:

-(void)catch_registration
{
    NSString *response = [[NSString alloc] initWithData:self.httpdata encoding:NSASCIIStringEncoding];
    if( [response isEqualToString:@"OK"] ){
        UIAlertView *successAlert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        successAlert.alertViewStyle = UIAlertViewStyleDefault;
        [successAlert show];
    }
    else //...
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if ([alertView.title isEqualToString:@"Success"])
        [self.navigationController popViewControllerAnimated:TRUE];
}

调试后,我知道在注册视图控制器中运行clickedButtonAtIndex后,[alert show]在仪表板视图控制器中运行,clickedButtonAtIndex不在仪表板视图控制器中运行,但是没有警报出现。

为什么不显示警报或如何进一步调试?

1 个答案:

答案 0 :(得分:0)

如果clickedButtonAtIndex"没有运行"如你所说,delegate可能没有正确设置。此外,您应该可以将代码从viewWillAppear:移动到viewDidAppear:,因为该视图不在视图层次结构中。您的解决方案可能是这两个问题的组合。