与 UITableView 外部的其他按钮相比,TableHeaderView 中的自定义 UIButton 响应速度不快

custom UIButton in TableHeaderView does not respond fast compared to other buttons outside UITableView

我在故事板中有一个 UITableView,我以编程方式在 UITableHeaderView 中编写按钮。我为灰色和红色的按钮设置了正常和突出显示的图像,其他外部 UITableView's 按钮也是如此。

如果我触摸所有按钮,按钮图像颜色会按预期从灰色变为红色,但是,如果我触摸得非常快,比如只需点击屏幕并在非常非常短的时间内离开屏幕, header 视图中的按钮不会改变图像颜色。但是 table 视图之外的其他按钮可以非常快速地改变图像颜色,几乎在我点击屏幕和离开屏幕的同时。

我很困惑这是怎么回事,因为它们共享相同的 setImage 代码。我能想到的是 UITableView 会影响按钮的性能吗?还是我做错了什么?

下面是 headverView 的代码:

- (void) setupProjectTableHeaderView {

    CGRect ProjectBounds = self.ProjectTableView.bounds;
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(ProjectBounds.origin.x,
                                                            ProjectBounds.origin.y,
                                                            ProjectBounds.size.width,
                                                            100)];
    UIButton *HomeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [HomeBtn setFrame:CGRectMake(ProjectBounds.origin.x,
                                ProjectBounds.origin.y,
                                ProjectBounds.size.width,
                                50)];
    HomeBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 12, 0, 0);

    [HomeBtn setTitle:@"Home" forState:UIControlStateNormal];
    [HomeBtn.titleLabel setFont:[UIFont systemFontOfSize:20]];
    [HomeBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    HomeBtn.titleEdgeInsets  = UIEdgeInsetsMake(0, 25, 0, 0);
    [HomeBtn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
    view.userInteractionEnabled = YES;
    [view addSubview:HomeBtn];    
    self.ProjectTableView.tableHeaderView = view;

}

我做了很多搜索,发现:

self.ProjectTableView.delaysContentTouches = NO; 

是解决我问题的关键。

似乎 UITableView 中的触摸事件被延迟了,所以如果将其设置为 NO,它将像普通按钮一样响应。

试试这个代码:

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)];

headerView.backgroundColor=[UIColor redColor];
UIButton *btn=[[UIButton alloc] init];
[btn setTitle:@"Button" forState:UIControlStateNormal];
btn.tag=section;
btn.frame=CGRectMake(0, 0, 320, 50);

[btn addTarget:self 动作:@selector(sectionBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; [headerView addSubview:btn];

return headerView;

} -(void)sectionBtnClicked:(id)发件人{

UIButton *btn=(UIButton*)sender;

[[[UIAlertView alloc] initWithTitle:@"Message" message:[NSString stringWithFormat:@"Button %d Clicked",btn.tag] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];

}