根据用户输入选择警报消息

时间:2012-09-18 14:17:10

标签: iphone xcode

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

所以我尝试使用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上的哪个按钮?

谢谢。

1 个答案:

答案 0 :(得分:1)

实施UIActionSheetDelegate并使用方法:

– actionSheet:clickedButtonAtIndex: 

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

如果您不想使用按钮索引,可以使用

获取点按按钮的按钮标题
– buttonTitleAtIndex:

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

Read more in the Apple docs


修改 如果要使用更多操作表,可以为每个操作表设置标记值。例如。 ActionSheet1有actionsheet.tag = 1等等。

然后,您可以通过给定操作表的标记切换– actionSheet:clickedButtonAtIndex:。 E.g:

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