我正在构建一个 UITableView,它在 tableview 的部分标题中有一个按钮,因此当用户向下滚动屏幕时,该按钮被固定在屏幕顶部。
问题是部分标题按钮的触摸事件在 UITableView 移动时未注册。如果 tableview 不滚动,该按钮只会获取触摸事件。
-(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;
}
目前,发生的情况是: - 如果 tableview 没有滚动,则按钮按您预期的方式执行:点击它,按钮获得 TouchUpInside 手势。- 如果 tableview 正在滚动,则按钮不会获得 TouchUpInside 手势 - 相反,tableview 只是停止在原地。
我尝试将 UITableView 子类化并查看 touchesBegan: 方法等,但没有成功。我看到了相同的模式:手势仅在表格视图不移动时显示。
更新: 这不是可用性问题 - 虽然我无法显示我正在处理的设计的屏幕截图,但在部分标题中使用按钮和控件是一个有效的用例。
这是一个快速草图来解释原因: