如何仅依赖于iOS版本的运行时系统覆盖方法?

前端之家收集整理的这篇文章主要介绍了如何仅依赖于iOS版本的运行时系统覆盖方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经通过使用实现了iOS 8的自动动态桌面单元格高度
  1. self.tableView.rowHeight = UITableViewAutomaticDimension;

对于不支持自动动态单元格高度的iOS 8之前,我覆盖了heightForRowAtIndexPath方法.

这与我所做的类似:Using Auto Layout in UITableView for dynamic cell layouts & variable row heights

问题是如何编写使用iOS 8自动单元格高度的代码,但会覆盖早期iOS版本的heightForRowAtIndexPath.
只有iOS版本小于8,我想要我的自定义heightForRowAtIndexPath方法.
有什么建议如何做到这一点?

解决方法

一个解决方案是覆盖视图控制器中的respondToSelector:方法.在检查heightForRowAtIndexPath:方法时,在iOS 8下返回NO.
  1. - (BOOL)respondsToSelector:(SEL)selector {
  2. static BOOL useSelector;
  3. static dispatch_once_t predicate = 0;
  4. dispatch_once(&predicate,^{
  5. useSelector = [[UIDevice currentDevice].systemVersion floatValue] < 8.0 ? YES : NO;
  6. });
  7.  
  8. if (selector == @selector(tableView:heightForRowAtIndexPath:)) {
  9. return useSelector;
  10. }
  11.  
  12. return [super respondsToSelector:selector];
  13. }

这样,当表视图进行如下调用时:

  1. if ([self.delegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)]) {
  2. }

您的代码将在iOS 8或更高版本下返回NO,并在iOS 7或更早版本下返回YES.

猜你在找的iOS相关文章