質問に答えるために、アップルは公開APIを提供していないため、ビュー階層について知られているものを使用して行う必要があります。 tableViewCellは常にtableViewの一部です。技術的には、は、tableViewCellは常にtableViewのビュー階層にありますまたはtableViewCellは常にそこからいくつかのスーパービューを持っていますが、それはtableViewです。ここでthis oneと同様の方法である:
- (UITableView *)getParentTableView:(UITableViewCell *)cell {
UIView *parent = cell.superview;
while (![parent isKindOfClass:[UITableView class]] && parent.superview){
parent = parent.superview;
}
if ([parent isKindOfClass:[UITableView class]]){
UITableView *tableView = (UITableView *) parent;
return tableView;
} else {
// This should not be reached unless really you do bad practice (like creating the cell with [[UITableView alloc] init])
// This means that the cell is not part of a tableView's view hierarchy
// @throw NSInternalInconsistencyException
return nil;
}
}
は、より一般的には、Appleが理由で、このような公共のAPIを提供していませんでした。実際には、tableView:cellForRowAtIndexPath:
のクラスのユーザーが実行時に構成できるプロパティを使用するなど、他のメカニズムを使用してtableViewのクエリを回避することをお勧めします。
出典
2017-09-19 23:21:43
JMM
セルには、そのセルが入っているテーブルにアクセスする理由はありません。理由が分かった理由を説明してください。おそらくもっと良い解決策があります。 – rmaddy
詳細ページがあり、異なるセルが使用されています。 2つのビューのタブビューを持って、私は通常それに2つのコントローラを追加します。だから私は子供のコントローラを追加するスーパービューコントローラを取得する必要があります。私はあなたが私の記述を知っていない、私の英語は良くありません: - ) –