2

我正在尝试检测用户是否按下了 actionSheet 上的取消按钮或破坏性按钮。根据他/她的输入,我想修改屏幕上显示的警报消息。

所以我尝试使用if来检查buttonIndex,但事实证明该buttonIndex值不会随着用户的输入而改变。

UIActionSheet *informUser = [[UIActionSheet alloc] initWithTitle:@"Missing data" delegate:self cancelButtonTitle:@"Thanks for telling me!" destructiveButtonTitle:@"I have ignored it!" otherButtonTitles:nil];

    [informUser showInView:self.view];

//        NSLog(@"Cancel button = %d", informUser.cancelButtonIndex);
//        NSLog(@"Destructive button = %d", informUser.destructiveButtonIndex);

    if(informUser.cancelButtonIndex == 1)
    {
        NSString *msg = [[NSString alloc] initWithFormat:@"Pls enter the number."];

        UIAlertView *alertUser = [[UIAlertView alloc] initWithTitle:@"Missing data" message:msg delegate:self cancelButtonTitle:@"Thanks!" otherButtonTitles:nil];

        [alertUser show];
    }

我还尝试使用单独的方法:

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex;

UIAlert但是,当我在同一个屏幕上的不同点有多个时,我会得到错误的结果。

简而言之,我想对用户的UIAlert不同操作/输入使用不同的。因此,如何检测actioSheet用户按下了哪个按钮?

谢谢你。

4

1 回答 1

1

实现UIActionSheetDelegate并使用方法:

– actionSheet:clickedButtonAtIndex: 

索引定义了您点击的按钮。

如果您不想使用按钮索引,您可以获取点击按钮的按钮标题

– buttonTitleAtIndex:

然后您可以将结果与您的按钮标题字符串进行比较。

在 Apple 文档中阅读更多内容


编辑: 如果您想使用更多操作表,您可以为每个操作表设置标签值。例如 ActionSheet1 有 actionsheet.tag = 1 等等。

然后您可以– actionSheet:clickedButtonAtIndex:通过给定操作表的标签进行切换。例如:

switch (actionsheet.tag) {
    case 1: 
        // do stuff
    break;
    case 2: 
        // do stuff
    break;
    default: break;
}

编辑 2: 这是一个示例类,应该向您展示逻辑:

头文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIActionSheetDelegate>

@end

实现文件:

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIActionSheet *as1 = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:@"Ok", nil];
    as1.tag = 0;
    as1.delegate = self;

    UIActionSheet *as2 = [[UIActionSheet alloc] initWithTitle:@"Title2" delegate:self cancelButtonTitle:@"Cancel2" destructiveButtonTitle:@"Delete2" otherButtonTitles:@"Ok2", nil];
    as2.tag = 1;
    as2.delegate = self;
}


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    switch (actionSheet.tag) {
        case 0: // as1
            switch (buttonIndex) {
                case 0:
                    // button index 0
                    break;

                case 1:
                    // button index 1
                    break;

                //....

                default:
                    break;
            }
            break;

        case 1: // as2
            switch (buttonIndex) {
                case 0:
                    // button index 0
                    break;

                case 1:
                    // button index 1
                    break;

                    //....

                default:
                    break;
            }
            break;

        default:
            break;
    }
}

@end
于 2012-09-18T14:30:07.293 回答