UIActionSheet,取消按钮运行方法

时间:2012-08-31 15:21:59

标签: iphone objective-c ios xcode uiactionsheet

每次我在UIActionSheet中按下取消按钮,它都会运行一个方法。我不知道为什么,我多次检查了整个代码,但我仍然看不到问题。你能帮我找到吗?

-(IBAction)moreOptions
{

    giftTitle = self.title;

     if(![giftTitle isEqualToString:@"bla"])
     {
        actionSheet = [[UIActionSheet alloc]initWithTitle:giftTitle
                                                            delegate:self
                                                   cancelButtonTitle:@"Back"
                                              destructiveButtonTitle:nil
                                                   otherButtonTitles:@"Send via email",
                                  @"Read in Wikipedia"
                                  , nil];
     }
    else 
    {
        actionSheet = [[UIActionSheet alloc]initWithTitle:giftTitle
                                                 delegate:self
                                        cancelButtonTitle:@"Back"
                                   destructiveButtonTitle:nil
                                        otherButtonTitles:@"Send via email",
                       @"Read in Wikipedia", @"Pineapple mode"
                       , nil];

    }
    actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
    [actionSheet showInView:self.view.window];

}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{

    // выстраеваем дальнейшие действия кнопок

        switch (buttonIndex) 
        {
            case 0:
                [self showPicker];
            break;

            case 1:
                [self goWiki];
            break;

            case 2:
                [self showPineapple];
            break;

            default:
            break;

        }

}

所以它运行方法showPineapple。请帮忙!

2 个答案:

答案 0 :(得分:1)

当您按下操作工作表上的取消按钮时,它的委托功能始终使用最后一个索引进行调用。

如果您要实现多个操作表,那么只需按标记值使用它。

答案 1 :(得分:0)

您需要实现以下内容:

更改您的ifelse部分,为每个UIActionSheet添加唯一标记:

if(![giftTitle isEqualToString:@"bla"]) {
    actionSheet = [[UIActionSheet alloc]initWithTitle:giftTitle
                                             delegate:self
                                    cancelButtonTitle:@"Back"
                               destructiveButtonTitle:nil
                                    otherButtonTitles:@"Send via email", @"Read in Wikipedia" , nil];
    actionSheet.tag = 10;
} else {
    actionSheet = [[UIActionSheet alloc]initWithTitle:giftTitle
                                             delegate:self
                                    cancelButtonTitle:@"Back"
                               destructiveButtonTitle:nil
                                    otherButtonTitles:@"Send via email", @"Read in Wikipedia", @"Pineapple mode", nil];

    actionSheet.tag = 20;
}

然后在actionSheet中查找标记:clickedButtonAtIndex:message handler:

case 2:
   if (actionSheet.tag == 20)
      [self showPineapple];
   break;

这意味着[self showPineapple]只能在else方案中运行,而if方案中不会发生任何事情(正如buttonIndex 3中的任何内容都不会发生{ {1}}场景(取消按钮确实位于索引3处)。