我在故事板中有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;
}
答案 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];
}