ユーザーが画面を下にスクロールすると、ボタンが画面の上部に固定されるように、テーブルビューのセクションヘッダーにボタンを持つ UITableView を構築しています。
問題は、UITableView が移動しているときに、セクション ヘッダーのボタンのタッチ イベントが登録されないことです。テーブルビューがスクロールしていない場合、ボタンはタッチイベントのみを取得します。
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (!_sectionHeaderView) {
_sectionHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
backButton.frame = CGRectMake(0, 0, 50, 50);
[backButton setImage:[UIImage imageNamed:@"upArrow"] forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(scrollToTop:) forControlEvents:UIControlEventTouchUpInside];
[_sectionHeaderView addSubview:backButton];
}
return _sectionHeaderView;
}
現在、何が起こるか: - テーブルビューがスクロールしていない場合、ボタンは期待どおりに動作します: タップすると、ボタンは TouchUpInside ジェスチャを取得します。- テーブルビューがスクロールしている場合、ボタンは TouchUpInside ジェスチャを取得しません。代わりに、テーブルビューはその場で停止します。
UITableView をサブクラス化し、touchesBegan: メソッドなどを調べてみましたが、うまくいきませんでした。同じパターンが見られます。ジェスチャは、テーブルビューが動いていない場合にのみ表示されます。
更新: これはユーザビリティの問題ではありません。作業中のデザインのスクリーンショットを表示することはできませんが、セクション ヘッダーでボタンとコントロールを使用することは有効なユース ケースです。
理由を説明する簡単なスケッチを次に示します。