3

selectRowAtIndexPath を使用して UITableViewCell の選択 (ハイライト) を強制しようとしています。

たとえば、テーブル ビューの最初のセルを常に強調表示したいとします。viewDidAppear で次のロジックを適用します。

[self.tableViewPrompts selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:0];

うまく機能しますが、アプリケーションの他の場所で同じロジックを適用しようとすると、セルが選択されません。上記のメソッドを呼び出す前に他のセルの選択を解除し、このメソッドを呼び出す前後にテーブルビューをリロードしようとしましたが、どのアプローチも機能していないようです!

テーブルビューのデリゲートを使用して、didSelectRowAtIndexPath.Eventを強制的に呼び出しましたが、これは機能しません。

PS:セルを選択しても、目的のセルを強調表示するだけで、何のアクションも実行されません。

ここで何が間違っていますか?

助けていただければ幸いです!!

4

3 に答える 3

5

セルを選択しても、目的のセルを強調表示するだけで、アクションはトリガーされません。

セルの強調表示されたプロパティを使用してみませんか?

UITableViewCell *cell = [self cellForRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0]];
cell.highlighted = YES;

今すぐテストすることはできませんが、機能するはずです。

編集

もちろん、さらに良いのは、cellForRowAtIndexPathを変更してそれを行うことです。

-(UITableViewCell) tableView:cellForRowAtIndexPath:
//...
if (indexPath.row == 0 && indexPath.section == 0) cell.highlighted = YES
else cell.highlighted = NO;
//...
return cell;
于 2012-12-28T19:55:29.273 に答える
3

なぜこれがあなたの場合にうまくいかないのか、私は困惑しています。これは、View Controller内のいくつかの場所から使用する方法viewDidAppearです。あなたがしていることと実際の違いはありません。

- (void)selectRow1
{
    NSIndexPath* idx = [NSIndexPath indexPathForRow:1 inSection:0];
    [_table selectRowAtIndexPath:idx animated:NO scrollPosition:UITableViewScrollPositionMiddle];
    [self tableView:_table didSelectRowAtIndexPath:idx];
}

_table私のテーブルプロパティ変数であり、への呼び出しdidSelectRowAtIndexPathが行われるため、選択のアクションが発生する可能性がありますが、それ以外の場合、コードとの唯一の実際の違いは scrollPosition パラメータです。

于 2012-12-28T19:53:12.127 に答える
0

setSelected を使用してセルを強調表示するだけです。

  [cell setSelected:YES];

UITableView-Ext全体の目的のためにこの拡張機能を作成しました

于 2015-06-02T06:39:35.833 に答える