最近在做项目等时候遇见一个bug,点击UITableView的Cell跳转到其他界面,经常会有延时,有时四五秒,有时会有十几秒。
查看网上也没有什么详细的介绍。iOS群里问也没有问出正确的答案。最后让自己找出了答案。
我用的设备iPhone5s,iOS版本8.4。模拟器测试也有问题。
我的第一个界面中的相关代码。其他的一些没什么关系的代码就不写了。
//返回每一行 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; cell.selectionStyle = UITableViewCellSelectionStyleNone; GASettingUtils *set = _tableSettingAry[indexPath.row]; cell.textLabel.text = set.settingTitle; cell.detailTextLabel.text = set.settingDetail; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell; } //点击事件。 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row ==0) { NSLog(@"click tableview"); //跳转到第二个界面 [self performSegueWithIdentifier:@"showSettingHotSpot" sender: self]; } }
第二个界面,并没有什么耗时操作(网络啊。。。),也没有太多控件,只是一个分组样式的UITableVIew。
解决办法找到两个。
将cell.selectionStyle设置成1、2、3。
也就是不要这样:cell.selectionStyle =UITableViewCellSelectionStyleNone;
设置成这几种都可以:
cell.selectionStyle = UITableViewCellSelectionStyleBlue; // 1
cell.selectionStyle = UITableViewCellSelectionStyleGray; //2
cell.selectionStyle = UITableViewCellSelectionStyleDefault; //3
这样后没有出现那个问题。
第二个方法
不管cell的selectionStyle,在tableview的点击事件方法中,也就是
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
在这个方法中添加一句代码
[tableView deselectRowAtIndexPath:indexPath animated:YES];
这样不论cell的selectionStyle是什么。都没有在延迟。
之后又发现一个问题,就是点击cell弹出alertview的时候,也会出现延迟。
这个经多次测试只能使用第一个方法避免这种问题的出现,第二种不能解决。