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

时间:2015-01-19 10:59:59

标签: ios uitableview uibutton

我在故事板中有UITableView,我以编程方式在UITableHeaderView中编写按钮。我为灰色和红色按钮设置了正常和高亮显示的图像,与其他外部UITableView's按钮相同。

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

我很困惑发生了什么,因为共享相同的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;

}

2 个答案:

答案 0 :(得分:2)

我做了很多搜索,并发现:

self.ProjectTableView.delaysContentTouches = NO; 

是解决我的问题的关键。

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

答案 1 :(得分:0)

试试这段代码:

- (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 action:@selector(sectionBtnClicked :) forControlEvents:UIControlEventTouchUpInside];     [headerView addSubview:btn];

return headerView;

} - (无效)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];

}