我试图在UITableView单元格中添加另一个视图控制器.这个想法是,您可以点击单元格,并扩展以显示更多内容 – 消息传递界面.这很重要(我认为)这是由一个单独的Messaging ViewController控制的.
扩展单元格并且具有适当约束的单元格内部的视图在Storyboards中实际上非常简单,所以我试图通过将容器中的新的VC添加到TableViewCell中来保留所有内容.这样我就可以在容器视图中添加约束,并从Messaging VC中管理内容.
这是错误:
Illegal Configuration: Container Views cannot be placed in elements that are repeated at runtime.
有什么办法来解决这个问题,还是有一种方法,我可以将视图从viewcontroller导入到这个tableviewcell中,并限制我在Storyboards中设置的配置?谢谢!
解决方法
我有同样的任务,这样做:
步骤1.创建子类MyCell:UITableViewCell.
步骤2.如果您使用自定义单元格,在InterfaceBuilder中将UIView添加到MyCell中,然后向所有边添加高度约束和约束.这个视图需要设置单元格的高度.
如果没有,请跳过此步骤并使用heightForRowAtIndexPath.
步骤3.在MyCell.h中,从视图高度约束和控制器属性中添加出口:
@interface MyCell: UITableViewCell @property (weak,nonatomic) MessagingVC *controller; @property (weak,nonatomic) IBOutlet NSLayoutConstraint *viewHeight; @end
步骤4.在cellForRowAtIndexPath中添加代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath]; // adjust this for your structure cell.controller = [[UIStoryboard storyboardWithName:@"MessagingVC" bundle:nil] instantiateInitialViewController]; [self addChildViewController:cell.controller]; [cell.controller didMoveToParentViewController:self]; [cell.contentView addSubview:cell.controller.view]; // if you use Self-Sizing Cells cell.viewHeight.constant = 200; // set your constant or calculate it return cell; }
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([cell isKindOfClass:[MessagingVC class]]) [((MyCell*)cell).controller removeFromParentViewController]; }