UIAlertView 不会委托

UIAlertView wont delegate

我尝试通过以下方式从 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>

这里有什么问题?

我认为你的问题遗漏了一些导致问题的重要细节,所以答案来自对你最后发表的评论的推测。您需要让所有视图控制器实现将呈现 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 指的是您当前所在的视图控制器。如果只有一个视图控制器实现了委托方法,并且不同的视图控制器显示警报,警报报告回呈现它的视图控制器(它不实现委托),因此它在完成时不做任何事情。我希望这回答了你的问题。