1

ボタンの数が不明な UIActionSheet があります。デリゲート メソッド buttonClickedAtIndex: (または同様のもの) を使用して、ユーザーがボタンをクリックしたときに呼び出すメソッドを決定する必要があります。

問題は、さまざまな状況でさまざまなインデックスにさまざまなボタンが表示されるときに、どのボタンがクリックされたかをどのように判断するのですか?

解決策の 1 つは、ボタンのタイトルを見てそれに基づいて行動することですが、これは見苦しく、ローカライズできず、悪い習慣です。

何か案は?

4

1 に答える 1

5

これは、1 つのコントローラーが複数のシートを表示する場合ですが、各シートにどのボタンが表示されるかを知っていますか? その場合は、シートのタグ プロパティを使用してそれらを区別できます。

- (IBAction)showEditSheet:(id)sender {
    UIActionSheet * sheet = [[UIActionSheet alloc] initWith...];
    sheet.tag = 1;
    [sheet showInView:self.view];
}
- (IBAction)showDeleteSheet:(id)sender {
    UIActionSheet * sheet = [[UIActionSheet alloc] initWith...];
    sheet.tag = 2;
    [sheet showInView:self.view];
}
- (void)actionSheet:(UIActionSheet *)actionSheet
  clickedButtonAtIndex:(NSInteger)buttonIndex {
    switch(actionSheet.tag) {
        case 1:
            // This is the edit sheet
            switch(buttonIndex) { ... }
            break;

        case 2:
            // This is the delete sheet
            switch(buttonIndex) { ... }
            break;

        default:
            NSAssert(NO, @"Unknown action sheet");
    }
}
于 2009-03-11T12:44:41.930 に答える