0

カスタム アクセサリ ボタンを備えた UITableView があります。表のセルが選択されると、アクセサリ ボタンが強調表示された状態になります。それは良いことです。別のセルが選択され、最初のセルが選択解除されると、アクセサリ ボタンは強調表示されていない状態に戻りません。

これは、セル (Rose) が選択されていないが、アクセサリ ボタンが選択されていることを示すスクリーン ショットです。

ここに画像の説明を入力

ここで提案された解決策を試しました。deselectRowAtIndexPath を呼び出した後、AccessoryDe​​tailDisclosureButton の選択が解除されない 動作しません。テーブル内のすべてのセルを再読み込みしましたが、まだアクセサリ ボタンが強調表示されていません。

新しく選択されたボタンのセレクターとメソッドの両方で、セル内のボタンの強調表示を明示的に解除しようとしましたtableView:accessoryButtonTappedForRowWithIndexPath:。喜びはありません。

ボタンを作成するコードは次のとおりです。

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
...
    UIButton *folderButton = [UIButton buttonWithType: UIButtonTypeCustom];
    folderButton.frame = CGRectMake(0.0, 0.0, 33.0, 33.0);
    [folderButton setImage: [UIImage imageNamed: @"open_document.png"] forState: UIControlStateNormal];
    [folderButton addTarget: self action: @selector(documentButtonAction:) forControlEvents: UIControlEventTouchUpInside];
    [folderButton setTag: [program tag]];
    cell.accessoryView = folderButton;

...
}

これまでに見つけた唯一の解決策は、強調表示されたボタンの画像を強調表示されていない画像に設定することですが、タップしてもボタンが強調表示されないため、これもかなりひどいものです。

アクセサリ ボタンのハイライトを解除するにはどうすればよいですか?

4

2 に答える 2

4

これを試して...

[tableView reloadRowsAtIndexPaths:@[indexPathToDeselect]
                 withRowAnimation:UITableViewRowAnimationNone];

whereindexPathToDeselectは、以前に強調表示された行のインデックス パスです。これにより、その行が強制的に再描画されます。

于 2013-03-14T16:31:26.783 に答える
2

デリゲート メソッドを使用するtableView:willDeselectRowAtIndexPath:tableView:didDeselectRowAtIndexPath: 、そこでカスタム accessoriesView の選択を解除してみてください。

于 2013-03-14T16:32:03.117 に答える