2

UITableViewCell を取得して、ハイライト時にaccessoryViewを変更しようとしています。そのため、ハイライトするとアクセサリが暗くなります。これまでのところ、1 つの例外を除いて、うまく機能させることができました。セルが押されるとセルが強調表示されますが、そのプレスが動かされて強調表示がキャンセルされると、accessoryView は強調表示された画像を保持します。

ハイライトがキャンセルされたかどうかを検出して、accessoryView を元の状態に戻す方法はありますか? これを実現するには、UITableViewCell のサブクラスを作成する必要がありますか? どんな助けでも大歓迎です。ありがとう!

通常の状態: 通常の細胞状態

強調表示された状態 ここに画像の説明を入力

タッチを押して動かした後(避けたいこと): ここに画像の説明を入力

 - (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    UIImageView *accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessoryDark.png"]];
    cell.accessoryView = accessoryView;
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    UIImageView *accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory.png"]];
    cell.accessoryView = accessoryView;
}
4

2 に答える 2

8

セットアップを再現しようとしましたが、渡される indexPath にdidUnhighlightRowAtIndexPathNSNotFound 行が含まれていることがわかりました。didUnhighlightRowAtIndexPathそのため、取得しているセルが非 nilであることを確認したい場合があります。didUnhighlightRowAtIndexPath に間違った indexPaths が渡されていることが判明した場合は、新しい API のバグであると判断できると思います。didSelectRow と didDeselectRow を使用するか、UITableViewCell をサブクラス化し、変更を監視する必要があります。サブクラスで選択および強調表示された状態に。

あなたが試すことができるもう一つのことは、アクセサリビューをに設定することです

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory"] highlightedImage:[UIImage imageNamed:@"accessoryDark"]];

次に、(理論的には) アクセサリ ビューは、セルの強調表示された状態に基づいて、正しい強調表示された画像または強調表示されていない画像を自動的に表示します。デリゲート メソッドでこれらの更新を監視する必要はありません。

于 2013-03-28T21:22:22.190 に答える
0

didSelectRow...と を使用してみてくださいdidDeselectRow...。また、選択したセルのインデックス パスへの参照を保持する必要があります。そうすれば、スクロールによってセルが台無しになることはありません(もちろん、cellForRow...現在のセルが選択されているセルであるかどうかを確認し、それに応じてアクセサリ ビューを設定します)。お役に立てれば!

于 2013-03-28T21:06:35.563 に答える