0

UITableView でスワイプ ジェスチャを使用しています。左にスワイプしたときに TableViewCell でアクションを実行しようとしています。正しいセルがスワイプされていることに気付きましたが、何らかの理由でランダムな他のセルがアクティブになっているようです。

私はそれがポインタと関係があるのではないかと疑っていますか?私はメモリポインタがあまり得意ではないので、何か助けていただければ幸いです。スワイプを処理するコードは次のとおりです。

- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer
{
    // Get location of the swipe
    CGPoint location = [gestureRecognizer locationInView:self.requestTableView];

    // Get the corresponding index path within the table view
    NSIndexPath *indexPath = [self.requestTableView indexPathForRowAtPoint:location];

    // Check if index path is valid
    if(indexPath)
    {
        //Get the cell out of the table view
        requestCell *cell = (requestCell *)[self.requestTableView cellForRowAtIndexPath:indexPath];

        NSLog(@"%@", [cell.IDLabel text]);


        cell.sendingImage.hidden = false;
        cell.activityIndicator.hidden = false;
        cell.requestorLabel.hidden = true;
        cell.dueDateLabel.hidden = true;
        cell.IDLabel.hidden = true;
        cell.priorityImage.hidden = true;     
    }
}
4

2 に答える 2

0

「cellForRowAtIndexPath」を呼び出しても、現在画面に表示されているセルのインスタンスはおそらく得られません。UITableView は (正しく使用されている場合) セルの再利用に基づいています。つまり、「cellForRowAtIndexPath」が呼び出されるたびに、テーブル ビューは未使用のセルを見つけようとし、存在しない場合は新しいセルを作成します。あなたの場合、スワイプジェスチャを実行するセルは、スワイプを処理するときに cellForRowAtIndexPath メソッドを呼び出したときに取得するセルと同じではないことを意味します。代わりに、セル タイプの現在使用されていないインスタンスが返され、そのインスタンスで変更を実行します。この問題を解決する 1 つの方法は、ジェスチャ ハンドラーでセルのプロパティを直接変更しないことです。tableView reloadCellAtIndexPath...

于 2012-08-22T21:17:49.863 に答える
0

おそらく、UITableViewCell をサブクラス化し、swipeGesture をセルに直接追加する必要があります。ただのアイデア。よく考えていませんが。

于 2012-08-22T21:41:56.533 に答える