UITableView标题视图没有响应空表上的触摸

时间:2013-11-17 22:47:24

标签: ios iphone objective-c uitableview uibutton

我遇到了一个奇怪的问题,我肯定有一个简单的解决方法/解释,但我周末都没有运气。

我有一个自定义UIView作为我的tableHeaderView,其中包含两个UIButton。按一个UIButton或另一个,通过更改dataSource并执行UITableView来更改[tableView reloadData]中的数据。

我遇到的问题是,在按下其中一个按钮后,我重新加载了表,但我没有行(dataSource / table为空)。我不能按另一个按钮来更改dataSource并重新加载表格,因为它变得没有响应,没有响应触摸。

我唯一的解释是,UITableView可能会在空虚时对触摸做出响应吗?但似乎是tableHeaderView没有响应的错误..

在iOS 6和iOS 7中都会发生这种情况。

PS:我知道在执行reloadData之前我可以检测到dataSource是空的并保留其他dataSource的数据,但我需要按下按钮并在空白时显示一条消息,这样对我没有帮助。

这就是我创建Table标题视图的方法,并将其分配给tableView。

self.tableCustomHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 48)];
self.tableCustomHeader.backgroundColor = [UIColor whiteColor];

// Configure Header
self.rankingBtn = [UIButton buttonWithType:UIButtonTypeCustom];
self.rankingBtn.frame = CGRectMake(3, 4, 157, 40);
self.rankingBtn.adjustsImageWhenHighlighted = NO;
self.rankingBtn.adjustsImageWhenDisabled = NO;
[self.rankingBtn setImage:[UIImage imageNamed:@"amigos_boton_ranking_on.png"] forState:UIControlStateNormal];
[self.rankingBtn setImage:[UIImage imageNamed:@"amigos_boton_ranking_off.png"] forState:UIControlStateDisabled];
[self.rankingBtn setImage:[UIImage imageNamed:@"amigos_boton_ranking_off.png"] forState:UIControlStateHighlighted];
[self.rankingBtn addTarget:self action:@selector(fetchRanking:) forControlEvents:UIControlEventTouchUpInside];

if (self.listType == FriendsListTypeRanking) {
    self.alfabeticBtn.enabled = NO;
}

self.alfabeticBtn = [UIButton buttonWithType:UIButtonTypeCustom];
self.alfabeticBtn.frame = CGRectMake(160, 4, 157, 40);
self.alfabeticBtn.adjustsImageWhenHighlighted = NO;
self.alfabeticBtn.adjustsImageWhenDisabled = NO;
[self.alfabeticBtn setImage:[UIImage imageNamed:@"amigos_boton_alfabetico_on.png"] forState:UIControlStateNormal];
[self.alfabeticBtn setImage:[UIImage imageNamed:@"amigos_boton_alfabetico_off.png"] forState:UIControlStateDisabled];
[self.alfabeticBtn setImage:[UIImage imageNamed:@"amigos_boton_alfabetico_off.png"] forState:UIControlStateHighlighted];
[self.alfabeticBtn addTarget:self action:@selector(fetchFriends:) forControlEvents:UIControlEventTouchUpInside];

if (self.listType == FriendsListTypeAlfabetic) {
    self.alfabeticBtn.enabled = NO;
}

[self.tableCustomHeader addSubview:self.alfabeticBtn];
[self.tableCustomHeader addSubview:self.rankingBtn];

[self.table setTableHeaderView:self.tableCustomHeader];

之后,没有太多可以展示的东西了。如果我为numberOfRowsInSection返回0,我就不能再按下tableHeaderView中的另一个UIButton来更改为另一组数据。

1 个答案:

答案 0 :(得分:0)

如果没有看到选择器的实现,那么仍无法弄清楚应用程序的错误。虽然一个看似容易解决的问题是您始终将alfabeticBtn.enabled设置为NO

请参阅:

if (self.listType == FriendsListTypeRanking) {
    self.alfabeticBtn.enabled = NO;
}

if (self.listType == FriendsListTypeAlfabetic) {
    self.alfabeticBtn.enabled = NO;
}

我会解决这个问题,然后如果您仍然遇到问题,请使用选择器方法更新您的问题。