今天在弄一个tableView默认选中cell,时,遇到一个问题,就是并未被选中(出现选中的样式)。我百度谷歌,提供的都是差不多的答案:if语句判断tableview的代理是否能够响应那个点击的方法,然后调用代理中的点击选中方法。
就是下面这样的: if ([self.tableView.delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) { [self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; } 我试了,根本就不管用。有同学建议我在数据模型属性中增加一个布尔变量,根据这个来变换视图。没错,这个方法的确可以,但这不是最明智的做法。明明系统有提供selectRowAtIndexPath..这个方法,为啥不用这个呢?而且cell中本身就带有- (void)setSelected:(BOOL)selected animated:(BOOL)animated这个方法,我们自己判断一下就可以改变相应的视图了,比如背景色呀,一些按钮的显示与隐藏等。我在询问我的同事的时候发现他对这个不熟悉,可能他没用过,一般我就是用这个来控制选中与不选中的状态,很方便。
我在有静态数据的页面去设置默认选中的cell是起作用的,但在非静态数据也就是要通过网络获取的页面设置是不起作用的,于是我就在获取到数据后添加了 [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];发现还是不管用。然后我想了想,会不会是因为这个时候tableview并没有那些数据,所以我设置了也没用呢。于是我就剪切这样代码,将它复制到【tableview reloadData】代码之后,然后就好了。
现在想想,以前设置collectionView的默认选中也不行,找了许多乱七八糟的代码帖进去,虽然最后也解决了问题,但那并不是最优雅的解决方式。大家现在知道为什么设置没用了吧,网上有些例子那都是静态数据,所以直接设置都是没问题的,动态数据那就得在获取数据tableview刷新页面后设置默认选中cell。