0

ユーザーがaccessoryType=UITableViewCellAccessoryDe ​​tailDisclosureButtonのセルをクリックするとUIActionSheetをポップ するUITableViewControllerがあります。

これで、このメソッド -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {は正常に機能します。ただし、どのセルユーザーがクリックしたかはわかりません。

たとえば、選択したセルを保存するプロパティを宣言することはできdidSelectRowAtIndexPath:(NSIndexPath *)indexPath {ますが、もっと良い方法があるはずです。

4

3 に答える 3

3

私は通常、アクションシートのタグをインデックスパスの行に設定しますが、これはセクション番号を気にしない場合にのみ機能します。セクションも必要な場合は、プロパティを作成するのが最善の方法です。

カテゴリや関連するオブジェクトをいじることもできますが、個人的にはそれはあまりにも複雑です。

于 2013-02-11T15:38:54.337 に答える
2

このデリゲートメソッドを実装しUITableViewて、アクセサリボタンがタップされたときにセルのインデックスパスを取得します。

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
}
于 2013-02-11T15:46:25.360 に答える
2

テーブルにセクションが1つしかない場合は、次のように、アクションシートを表示した行をタグに格納できます。

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
    NSString *title = [NSString stringWithFormat:@"Sheet for row %i", indexPath.row];
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:title delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Option 1", @"Option 2", nil];
    [sheet setTag:indexPath.row];
    [sheet showInView:self.view];
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    int row = actionSheet.tag;
    NSLog(@"Selected actionSheet buttonIndex %i for row: %i", buttonIndex, row);
}

おそらく最も簡単な方法ですが、それが最善の方法だとは言えません。

于 2013-02-11T15:48:09.257 に答える