3 回答
TA贡献1772条经验 获得超5个赞
避免检查iOS版本
id view = [tableViewCellInstance superview];
while (view && [view isKindOfClass:[UITableView class]] == NO) {
view = [view superview];
}
UITableView *tableView = (UITableView *)view;
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;
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 关注
- 1422 浏览
添加回答
举报