UIAlertView不会委托

时间:2015-01-15 14:40:42

标签: objective-c cocoa-touch uikit

我试图通过以下内容从UIAlertView获取内容:

UIAlertView *loginView = [[UIAlertView alloc] initWithTitle:@"Login"
                                                    message:@"Please enter user and pass"
                                                   delegate:self
                                          cancelButtonTitle:@"Abort"
                                          otherButtonTitles:@"Login", nil];
[loginView setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
[loginView show];

然后

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1)
    {
        UITextField *username = [alertView textFieldAtIndex:0];
        NSLog(@"username: %@", username.text);

        UITextField *password = [alertView textFieldAtIndex:1];
        NSLog(@"password: %@", password.text);

    }
}

在我的.h文件中

@interface loginTest :  UIViewController <UIAlertViewDelegate>

这里有什么问题?

1 个答案:

答案 0 :(得分:2)

我认为您的问题缺少导致问题的一些重要细节,因此答案来自对您最后评论的推测。您需要让所有视图控制器实现将呈现UIAlertView的警报视图委托。听起来您在ViewController中实现了委托,但在abc中却没有。为了进一步解释,这是代码中的解释。

假设您有ViewControllerAViewControllerB。在ViewControllerA.h

@interface ViewControllerA : UIViewController <UIAlertViewDelegate>

ViewControllerB.h

@interface ViewControllerB : UIViewController <UIAlertViewDelegate> 

然后在ViewControllerA.mViewControllerB.m中,您需要实现:

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1)
    {
        // do stuff
    }
}

当您显示UIAlertView并将委托设置为self时,self指的是您当前所在的视图控制器。如果只有一个视图控制器实现了委托方法,并且一个不同的视图控制器显示警报,警报报告给呈现它的视图控制器(它没有实现代理),因此它完成后不会做任何事情。我希望这回答了你的问题。