0

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。助けてください !

4

2 に答える 2

1

アクションシートのキャンセルボタンを押すと、デリゲート関数が常に最後のインデックスで呼び出されます。

複数のアクションシートを実装している場合は、タグ値で使用してください。

于 2012-08-31T15:25:46.083 に答える
0

次のようなものを実装する必要があります。

ifおよびセクションを変更してelse、各 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: メッセージ ハンドラーでタグを探します。

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

これは、シナリオで[self showPineapple]のみ実行され、elseシナリオで何も起こらないことを意味します (シナリオで3ifに対して何も起こらないのと同じように([キャンセル] ボタンが実際にインデックス 3 にある場合)。buttonIndexelse

于 2012-08-31T15:46:53.397 に答える