非Static なUITableView __つまりDynamic Prototypes なUITableView__のUITableViewCell 上のUIViewは、UITableViewCell も含めて動的に用意されるので、普通にIBOutlet とかでつかまえようとすると怒られます。
Illegal Configuration: Connection "myUIViewOutletName" cannot have a prototype object as its destination.
とか言われちゃうわけです。
cell.subViews objectAtIndex: じゃダメ
正直、ナメてました。
UITableViewCell を取得して、subViews 総ナメでNSStringFromClass:でクラス名で探せば一発だろうと。
UITableViewCellContentView て何よ
UITableViewCell のsubViews を確認してみたところ、アイテム数は1つだけ。
UITableViewCellContentView という名前のクラスでした。
結局、力技
結局、UITableViewCellContentView をUIView* で取得して、そのsubViews から更に目的のUIView をクラス名の一致で探すという力技に落ち着きました。
コードはこんな感じ。
static NSString* const CELL_IDENTIFIER = @"CellIdentifier"; static NSString* const CLASS_NAME = @"UITableViewCellContentView"; static NSString* const VIEW_NAME = @"UITextView"; - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER]; for ( UIView* tvccv in cell.subviews ) { if ( [NSStringFromClass(tvccv.class) isEqualToString:CLASS_NAME] ) { for ( UIView* myView in tvccv.subviews ) { if ( [NSStringFromClass(myView.class) isEqualToString:VIEW_NAME] ) { // ここで取得したUIView* をキャストして色々すればOK // 例:このコードではVIEW_NAME = @"UITextView" なので、(UITextView*)でキャスト } } } } return cell; }
参考
ググって見つけた、@hachinobu1 さんの以下の記事を参考にさせて頂きました。
__つか、まんまです__