2017-09-19 21 views
0

CustomCellでカスタムセルでtableViewを取得するにはどうすればよいですか?カスタムセルでtableViewを取得するにはどうすればよいですか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell" forIndexPath:indexPath]; 
    return cell; 
} 

@implementation CustomCell 
- (void)awakeFromNib { 
    [super awakeFromNib]; 

    // How do I get tableView by custom cell in the CustomCell? 

} 
@end 
+0

セルには、そのセルが入っているテーブルにアクセスする理由はありません。理由が分かった理由を説明してください。おそらくもっと良い解決策があります。 – rmaddy

+0

詳細ページがあり、異なるセルが使用されています。 2つのビューのタブビューを持って、私は通常それに2つのコントローラを追加します。だから私は子供のコントローラを追加するスーパービューコントローラを取得する必要があります。私はあなたが私の記述を知っていない、私の英語は良くありません: - ) –

答えて

0

質問に答えるために、アップルは公開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のクエリを回避することをお勧めします。

+0

あなたの答えをありがとう、それは本当に良いです。 : - ) –

関連する問題