3 回答
![?](http://img1.sycdn.imooc.com/5458453d0001cd0102200220-100-100.jpg)
TA贡献1772条经验 获得超5个赞
避免检查iOS版本
id view = [tableViewCellInstance superview];
while (view && [view isKindOfClass:[UITableView class]] == NO) {
view = [view superview];
}
UITableView *tableView = (UITableView *)view;
![?](http://img1.sycdn.imooc.com/53339fdf00019de902200220-100-100.jpg)
TA贡献1853条经验 获得超9个赞
在iOS7 beta 5中UITableViewWrapperView是的超级视图UITableViewCell。也是UITableView一个的监督UITableViewWrapperView。
因此,对于iOS 7,解决方案是
UITableView *tableView = (UITableView *)cell.superview.superview;
因此,对于iOS 6以下的iOS,解决方案是
UITableView *tableView = (UITableView *)cell.superview;
![?](http://img1.sycdn.imooc.com/54586425000103f602200220-100-100.jpg)
TA贡献1821条经验 获得超4个赞
Swift 5扩展
递归地
extension UIView {
func parentView<T: UIView>(of type: T.Type) -> T? {
guard let view = superview else {
return nil
}
return (view as? T) ?? view.parentView(of: T.self)
}
}
extension UITableViewCell {
var tableView: UITableView? {
return parentView(of: UITableView.self)
}
}
使用循环
extension UITableViewCell {
var tableView: UITableView? {
var view = superview
while let v = view, v.isKind(of: UITableView.self) == false {
view = v.superview
}
return view as? UITableView
}
}
- 3 回答
- 0 关注
- 1427 浏览
添加回答
举报