私はUITableViewCellsにシングルタップジェスチャ認識器とダブルタップジェスチャ認識器を追加しました。しかし、テーブルを数回スクロールすると、テーブルをスクロールするスワイプジェスチャーの終わりと、スクロールアニメーションの開始との間にますます時間がかかります。UITableViewCell GestureReognizerのパフォーマンスに関する問題
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"tableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[cell addGestureRecognizer:singleTap];
UITapGestureRecognizer* doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)];
doubleTap.numberOfTapsRequired = 2;
doubleTap.numberOfTouchesRequired = 1;
[singleTap requireGestureRecognizerToFail:doubleTap];
[cell addGestureRecognizer:doubleTap];
if (tableView == self.searchDisplayController.searchResultsTableView) {
// search results
}
else {
// normal table
}
return cell;
}
SingleTap:とダブルタップ:初期スクロールが滑らかであるので、方法
- (void)singleTap:(UITapGestureRecognizer *)tap
{
if (UIGestureRecognizerStateEnded == tap.state) {
UITableViewCell *cell = (UITableViewCell *)tap.view;
UITableView *tableView = (UITableView *)cell.superview;
NSIndexPath* indexPath = [tableView indexPathForCell:cell];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
// do single tap
}
}
- (void)doubleTap:(UITapGestureRecognizer *)tap
{
if (UIGestureRecognizerStateEnded == tap.state) {
UITableViewCell *cell = (UITableViewCell *)tap.view;
UITableView *tableView = (UITableView *)cell.superview;
NSIndexPath* indexPath = [tableView indexPathForCell:cell];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
// do double tap
}
}
私はif (cell == nil)
状態にジェスチャーrecognisersを追加しようとしたが、それらは細胞に添加したことがないどこ。
また、個別のセルではなく、tableViewにジェスチャを追加しましたが、これはsearchDisplayControllerの問題、つまりキャンセルボタンのタップが認識されない原因となりました。
私はどんな考えにも感謝します。
おかげで、私はちょうど(セルが== nilの) 'iOS5をし、ストーリーボードを使用して、真のことはありません場合は、'ことを実現し、同じ解決策を考え出しましたあなたの2番目の提案として、それはうまく動作します。しかし、私はあなたの最初のアイデアがもっと好きです、私はそれを試してみましょう。 – steharro