UISplitViewControllerを使用するiPadアプリがあります(左側にUITableView、右側に詳細ビューがあります)。テーブルビューでは、選択したセルをタップすると青色で強調表示されます。
次のメソッドを呼び出すと、セルは選択されていますが、青色で強調表示されていません。
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
私は文字通り、セルがタップされたかのようにプログラムでセルを強調表示するために、さまざまなデリゲートメソッドやハックをいじくり回してきました。できません。
私はこれでほとんどそこに到達することができました:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (shouldHighlightCell)
{
NSIndexPath *indexPathForCellToHighlight = [NSIndexPath indexPathForRow:0 inSection:0];
if ([indexPath isEqual:indexPathForCellToHighlight])
{
cell.selected = YES;
shouldHighlightCell = NO;
}
}
}
私がこれを持っている限り、それは機能します(そうでなければ、別のセルがタップされても選択されたままになります):
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
if ([[self.tableView cellForRowAtIndexPath:ip] isSelected])
{
[[self.tableView cellForRowAtIndexPath:ip] setSelected:NO];
}
NSIndexPath *iToTheP = indexPath;
return iToTheP;
}
私はこれが奇妙で複雑な回避策であることを知っています。私は気にしませんが、それは完全には機能しません。選択したセルは、画面からスクロールするとハイライトが失われますが、タップされたセルは、画面からスクロールするとハイライトされたままになります。
私はこれに絶対に困惑しています。この回避策は必要ないはずであり、はるかに簡単な解決策があると確信しています。