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條經驗 獲得超5個贊
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 關注
- 1464 瀏覽
添加回答
舉報