0

TableSearchに基づく検索表示ビューコントローラーがあります。

通常、次の式は選択されたインデックス行を与えます:

self.tableView.indexPathForSelectedRow.row

ただし、検索モードでは、次を使用して選択した行を取得できます。

self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow.row

上記のインデックスを使用して、処理の直後に (didSelectRowAtIndexPath の最後で) それぞれの行を (バックエンド配列から) 削除します。私が使用する配列は、Apple の例のとおり、listContent とfilteredListContent です。

私の問題は、検索モードで、次を使用して行を削除することです。

[self.filteredListContent removeObjectAtIndex: self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow.row]

ただし、同時に、非検索モードに戻ったときにその行が表示されないため、同じオブジェクトを self.listContent から削除したいと考えています。

検索結果ビューでは、self.tableView.indexPathForSelectedRow.row が定期的に更新されないことがわかりました。代わりに、検索結果ビューに入る前に最後に選択された行が表示されます。

もちろん、両方のインデックスを相互参照できるように、コンテンツを配列オブジェクトに入れることもできます。しかし、それ以外に効率的な解決策はありますか? テーブルビューにはこのメカニズムが必要だと思います。

そして、はい、私はすでに私のviewWillAppearで次のことを行っています:

   [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES];
4

1 に答える 1

0

これは私にとってはうまくいっています...

 #pragma mark - delete row
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {

        if(tableView == self.searchDisplayController.searchResultsTableView)
             // searching mode
        {
            // find row (index) from listContent
            arrayObject = [filteredlistContent objectAtIndex:indexPath.row];
            NSUInteger fooIndex = [listContent indexOfObject: arrayObject];
            NSLog(@"index listContent %u", fooIndex);
            //remove from listContent
            [self.listContent removeObjectAtIndex:fooIndex];
            [self.tableView reloadData];

            //remove from filteredlistContent
            [self.filteredlistContent removeObjectAtIndex:indexPath.row];
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

        }
        else  //  tableView mode
        {
        [self.listContent removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }
    }
}
于 2012-11-05T08:51:08.443 に答える