現在、サブビューを追加するときに UICollectionViewCell で奇妙な問題に直面していますが、特定の状況でのみ発生します。
シナリオは次のとおりです。
私は、ネストされたビューを持つ非常に特定のプロトコル (ADGControl) に準拠する「コンテナ」ビューを持っています。通常、カスタム コントロールの UIKit コントロール サブクラス、つまり MyCustomTextField : UITextField です。
「コンテナ」ビューは、セルのコンテンツ ビューにサブ ビューとして追加しようとしているカスタム コントロールへの強い参照を保持する「innerControlView」というプロパティを公開します。
コードは次のとおりです。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
FormControlCollectionViewCell *cell = [self.formCollectionView dequeueReusableCellWithReuseIdentifier:@"formControlCell" forIndexPath:indexPath];
NSArray *sectionContents = [_controlList objectAtIndex:[indexPath section]];
// This works
//UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 315.0f, 30.0f)];
//textField.borderStyle = UITextBorderStyleLine;
//[cell.controlView addSubview:textField];
// This doesn't (see the behaviour in video clip)
id <ADGControl> control = [sectionContents objectAtIndex:[indexPath row]]; // The container view I'm referring to
[cell.contentView addSubview:(UIView *)[control innerControlView]]; // [control innerControlView] is the typical UIKit control subclass for custom controls. In this example it will be a UITextField
return cell;
}
上記のコード コメントでわかるように、UIKit コントロール (textField) を直接追加しようとすると、問題なく動作します。ただし、カスタム コントロール ([control innerControlView]) を追加しようとするとすぐに、次のビデオ クリップに見られるような予期しない動作が発生します: http://media.shinywhitebox.com/ryno-burger/ios-simulator-ios-シミュレータ-ipad-ios-a
上記のリンクは、私が得た「予期しない動作」をよりよく示すための 23 秒の短いビデオ クリップです。
問題が何であるかについて、私が間違っていることを誰かが指摘できれば、感謝します。
ありがとう