UIAlertView按钮操作无效

3

我有一个警告视图,当我点击“是”按钮时,它应该产生另一个警告视图和一个提示消息,但是这并没有发生。我无法找出问题所在。这是我的代码:

-(void)myMethod {
    UIAlertView *saveAlert = [[UIAlertView alloc] initWithTitle:@"First Message"
                                                        message:@"My First message"
                                                       delegate:nil
                                              cancelButtonTitle:@"No"
                                              otherButtonTitles:@"Yes", nil];
    saveAlert.tag=0;
    [saveAlert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO];
}

这是我使用的方法来提供不同警告视图的功能。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if(alertView.tag==0) {

        if (buttonIndex == 0)
        {
            //Code for Cancel button
        }
        if (buttonIndex == 1)
        {
            //code for yes button
            MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
            hud.mode = MBProgressHUDModeText;
            hud.labelText = @"Successfully displayed First Message";
            hud.margin = 10.f;
            hud.yOffset = 150.f;
            hud.removeFromSuperViewOnHide = YES;
            [hud hide:YES afterDelay:3];

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Second Message"
                                                            message:@"My second message"
                                                           delegate:nil
                                                  cancelButtonTitle:@"No"
                                                  otherButtonTitles:@"Yes",nil];
            alert.tag=1;
            [alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];
        }
    }

    if (alertView.tag==1) {

        if (buttonIndex == 0)
        {
            //Code for Cancel button
        }
        if (buttonIndex == 1)
        {
            //Code for yes Button
            MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
            hud.mode = MBProgressHUDModeText;
            hud.labelText = @"Succesfully displayed Second Message";
            hud.margin = 10.f;
            hud.yOffset = 150.f;
            hud.removeFromSuperViewOnHide = YES;
            [hud hide:YES afterDelay:3];
        }
    }
}

有人能帮忙找到问题吗?为什么我在第一个警告框中点击“是”按钮后无法获得第二个警告框?

3个回答

2

你正在将nil作为警告视图的代理进行指定。你需要指定一个对象,这样才能调用alertView:clickedButtonAtIndex:方法!


2

您尚未为您的UIAlertView设置代理,并确保您的代理符合UIAlertViewDelegate协议。以下是代码片段。

您的控制器符合UIAlertViewDelegate协议:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 

创建UIAlertView并设置代理:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"First Message"
                                                    message:@"Show second message"
                                                   delegate:self
                                          cancelButtonTitle:@"No"
                                          otherButtonTitles:@"Yes", nil];
[alertView show];

实现UIAlertViewDelegate委托方法:

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if( 0 == buttonIndex ){ //cancel button
        [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
   } else if ( 1 == buttonIndex ){
        [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
        UIAlertView * secondAlertView = [[UIAlertView alloc] initWithTitle:@"Second Message"
                                                                   message:@"Displaying second message"
                                                                  delegate:nil
                                                         cancelButtonTitle:@"OK"
                                                         otherButtonTitles:nil];
        [secondAlertView show];
    }
}

@Teja_NVM 如果这个回答有帮助到您,您可以接受它或点赞,谢谢。 - VoidStack

0

如果您想更清晰地处理这个问题,可以使用基于块的AlertView。 创建新文件->子类->UIAlertView

SuperAlertView.h

#import <UIKit/UIKit.h>

@class MySuperAlertView;

typedef void (^MySuperAlertViewBlock) (MySuperAlertView *alertView);

@interface MySuperAlertView : UIAlertView

- (instancetype) initWithTitle:(NSString *)title message:(NSString *)message;
- (void) addButtonWithTitle:(NSString *)buttonTitle block:(MySuperAlertViewBlock) block;

@end

SuperAlertView.m

#import "MySuperAlertView.h"

@interface MySuperAlertView()<UIAlertViewDelegate>
@property NSMutableArray *blocks;
@end

@implementation MySuperAlertView


- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message
{
    if (self = [super initWithTitle:title message:message delegate:self cancelButtonTitle:nil otherButtonTitles:nil])
    {
        self.blocks = [NSMutableArray array];
    }
    return self;
}

- (void)addButtonWithTitle:(NSString *)buttonTitle block:(MySuperAlertViewBlock)block
{
    [self addButtonWithTitle:buttonTitle];

    [self.blocks addObject:block ? [block copy] : [NSNull null]];
}

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    MySuperAlertViewBlock block = self.blocks[buttonIndex];

    if ((id) block != [NSNull null]){
        block(self);
    }
}


@end

使用方法:

MySuperAlertView *alertView = [[MySuperAlertView alloc] initWithTitle:@"Info" message:NSLocalizedString(@"EMAIL_SENT_SUCCESSFULL", nil)];
            [alertView addButtonWithTitle:@"Ok" block:^(MySupertAlertView *alertView) {
                // handle result from ok button here
            }];
            [alertView addButtonWithTitle:@"cancel" block:NULL];
            dispatch_async(dispatch_get_main_queue(), ^{
                [alertView show];
            });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接