时添加子视图它时,但只能在特定情况下,我目前正面临着UICollectionViewCell一个奇怪的问题意外行为。添加子视图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的控件(文本框)直接,它工作得很好。但是,只要我尝试添加我的自定义控件([control innerControlView]),就会看到视频剪辑中出现的意外行为:http://media.shinywhitebox.com/ryno-burger/ios-simulator-ios-simulator-ipad-ios-a
上面的链接只是短短23秒的视频剪辑, “意外的行为”,我得到的。
如果有人能指出我在做什么错什么样的问题可能是我会很感激。
感谢
你可能想移动的代码(添加子视图)的子类。因为如果你这样做,它会在每次调用方法时添加它。 –
好凉,但我不知道在哪里将其添加到我的UICollectionViewCell的子类,因为我从dequeueReusableCellWithReuseIdentifier实例:。我试过 - (id)初始化,但它没有被调用。我有一个很难用dequeueReusableCellWithReuseIdentifier,所以我不知道在哪里可以加我的初始化代码时理解UICollectionViewCell的生命周期。 – RynoB
对不起,我的意思是说 - (id)initWithFrame。它从来没有在调试器中击中我的断点。 – RynoB