時添加子視圖它時,但只能在特定情況下,我目前正面臨着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