使用UIViewController作为TableView单元格

Wit*_*cio 4 uitableview uiviewcontroller ios swift

我有一个分段控件,它在两个UIViewControllers之间切换.信息视图和列表视图(TableView).我想使用第一个UIViewController作为我的TableView的第一个单元格(在另一个段上).有一种方法可以将UIViewController转换为单元格或某种方式将其用作TableView的单元格吗?

Mah*_*wal 13

以您自己的方式使用此代码.在这里,我们将控制器视图添加为单元格的子视图,并使用自动布局进行正确管理.您只需要通过理解来使用代码.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath:indexPath)
    cell.layoutIfNeeded()

    let infoVC = self.storyboard.instantiateViewControllerWithIdentifier("InfoVC")
    self.addChildViewController(infoVC)
    cell.contentView.addSubview(infoVC.view)

    infoVC.view.translatesAutoresizingMaskIntoConstraints = false
    cell.contentView.addConstraint(NSLayoutConstraint(item: infoVC.view, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: cell.contentView, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0))
    cell.contentView.addConstraint(NSLayoutConstraint(item: infoVC.view, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: cell.contentView, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0))
    cell.contentView.addConstraint(NSLayoutConstraint(item: infoVC.view, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: cell.contentView, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0.0))
    cell.contentView.addConstraint(NSLayoutConstraint(item: infoVC.view, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: cell.contentView, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0.0))

    infoVC.didMoveToParentViewController(self)
    infoVC.view.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要考虑添加一些代码来解决重用单元格的情况.在添加新视图控制器之前,应删除先前的视图控制器.完成后,前一个VC应该与`removeFromParentViewController()一起调用`willMove(toParentViewController:nil)` (4认同)
  • 此代码假定拥有UITableView的VC是DataSource (3认同)
  • `UITableViewCell` 有一个方法 `prepareForReuse()`,它在单元格被重用之前被调用。覆盖此方法并在其中包含的任何`UIViewController` 上调用`removeFromParentViewController()` 是一个可行的选择。 (2认同)