1

ボタンを模倣する TableViewCells を作成しようとしています。これは、タッチダウン時にハイライト効果があり、タッチアップ時に標準の選択状態をトリガーする必要があることを意味します。これは意図したとおりに機能しますが、問題は、タッチダウンしてからハイライトされた状態が表示されるまでに数秒の遅延があることです。どうしてこれなの?タッチダウン時にすぐにハイライトを遅延なく表示するにはどうすればよいですか?

TableViewデリゲートで使用しているコードは次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[tableView cellForRowAtIndexPath:indexPath] setSelected:YES animated:NO];
    // do something here
    [[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:NO];
}
4

1 に答える 1

0

あなたが尋ねたように、私はあなたの質問を本当に理解していないと思います。UITableViewCellハイライトするという意味で押すと、すでに「ボタンのように」機能します。コードの外観から、tableView がネイティブに実行しないことは実際には何もしません。

基本的に、遅延が発生している理由は、セルが既にタッチ時に強調表示されているためです。選択済みを YES に設定してから NO に設定していますが、セルはすでにこれを行っているため、同じことを 2 回、1 回行っているようなものです。それ自体で、そして一度強制されます - これがあなたが見ている遅延の理由です.

入る必要があるdidSelectRowAtIndexPath:のは、ボタンが押されたときに実行したいアクションだけであり、セルに何をさせたいか、またはタッチされたときにセルがどのように動作するかではありません。これらの動作を処理する他のデリゲート メソッドがあります。

セルのハイライト色を変更する場合は、こちらの質問/回答を参照してください。

アップデート

デフォルトでは、Apple が提供する UITableView コードには deselect メソッドが含まれていません。したがって、セルを選択すると、選択されたままになります。セルの選択を解除するには、次のメソッドをdidSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    /* The following will deselect the cell on touchUp */
    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}
于 2012-05-04T23:51:37.057 に答える