2

これはかなり単純な状況です:

独自のプロパティ、アウトレットなどを備えたカスタム UITableViewCell クラスがあります。その中には 2 つの UIButtons -> LikeDislikeがあります。それらは、コメント ボタンの好きなボタンまたは嫌いなボタンと考えることができます。

IBActions を次のように追加しました (CustomCell クラスではなく、TableViewController で):

    - (IBAction)likeComment:(UIButton *)sender {

 CustomTableCell *thisCell = (CustomTableCell *)[[[sender superview] superview] superview]; // to fetch that cell from view
    RSSItem *item = [commentsToDisplay objectAtIndex:indexPath.row];
   //code to set NSUserDefault value for the comment ID, so it can never be voted for again
   [self.tableView reloadData];

}

CellForRowAtIndexPath で、現在のアイテムのユーザーの既定値が選択されているかどうかを確認し、選択されている場合はボタンを無効にします (両方ではなく、好きか嫌いかを選択できるため、すべてのボタンを無効にする必要があります)。

if((/* get NSUserDefault for the ID*/) == YES){
    [cell.likeButton setEnabled:NO];
    [cell.dislikeButton setEnabled:NO];
}

ここでは、適切なセルの indexPath が呼び出され、フェッチされた行のアイテムとアイテムの ID が正しいです。

問題は、現在選択されているボタンに加えて、ランダムなボタン (再利用されたセルの一部) も選択される (無効になる) ことです。アウトレットからそれらを無効にしようとすると、同じことが起こります。もちろん、それは受け入れられません。すべてのさまざまな組み合わせを試してみましたが、どうやら間違った考え方をしているようです。

何か提案やリンクはありますか? または、これらのボタンをアクションと場所に正しく接続する方法。

4

3 に答える 3

2

これは、表のセルが再利用されているために発生します。詳細については、 のドキュメントを確認してくださいUITableView。これを修正するには、テーブルの特定のインデックスのボタンを別の場所で有効または無効にする必要があるかどうかの情報を保持してから、 でそれらを有効または無効にしtableView:cellForRowAtIndexPath:ます。

于 2012-11-15T11:14:27.350 に答える