场景:
我有2个VC-
ChildViewController
它具有一个tableView,其中显示项目列表。在将表填充到我的ParentVC之后,我需要传递tableView.contentSize.height
值。为此,我使用委托
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableVieww.dequeueReusableCellWithIdentifier("cellreuse", forIndexPath: indexPath)
cell.textLabel?.text = "heyy"
hght.constant = tableVieww.contentSize.height
if flag == true
{
delegate.tableHeight(tableVieww.contentSize.height)
print(tableVieww.contentSize.height)
flag = false
}
return cell
}
ParentViewController
它具有一个带一个单元格的tableView。此单元格显示childVC(即nwVC)的视图。我想根据ChildVC的tableView的高度更改单元格的高度。
我正在通过以下代码添加childVC的视图,我知道这样做是错误的地方,但是我没有得到如何,在哪里和做什么去让childViewController的功能在ParentViewController的功能之前被调用?
vc3 = self.storyboard?.instantiateViewControllerWithIdentifier("nwVC") as? nwVC//newVC is ChildViewController
vc3!.view!.frame = cell.myview.bounds
vc3!.didMoveToParentViewController(self)
cell.myview.addSubview(vc3!.view)//UIView inside the cell
vc3!.delegate=self
问题-
在调用childViewController函数之前,将调用ParentViewController的tableView的委托方法,因此我无法根据childVC的表内容来更新rowHeight。
最佳答案
最后,我想出了一些可行的方法,但仍然需要iOS开发人员查看此问题的建议。
标记:在加载ParentVC的表视图委托函数之前,我无法执行childVC函数的加载,但是我做了一些很好的工作。
在我的ParentVC的中
override func viewWillAppear(animated: Bool) {
vc3 = self.storyboard?.instantiateViewControllerWithIdentifier("nwVC") as? nwVC
addChildViewController(vc3!)
vc3!.didMoveToParentViewController(self)
vc3!.delegate=self
}
//childVC's delegate function implementation
func tableHeight(height: CGFloat) {
height = height//I get the table view height from the childVC,height is a variable declared as var height = 200.0(it can be any value > 0)
print(ht)
self.tableVIeww.reloadData()//reload my tableView
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return hgt//at first call it returns the default value but in the 2nd call it returns the value sent by childVC
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableVIeww.dequeueReusableCellWithIdentifier("cellreuse", forIndexPath: indexPath) as! myTVC
cell.backgroundColor = UIColor.greenColor()
vc3?.view.frame = cell.myview.bounds
cell.myview.addSubview((vc3?.view)!)//myView is the view in the cell's content view pinned to its edges.
return cell
}
专业人士和专业人士的
专业的
最大的优势是您可以完成工作。
骗子
如您所见,ChildVC的视图被添加了2次(其中1个具有默认的height变量,高度是单元格大小,第2次是在重新加载表格时)。我认为这可能会稍微影响性能,如果数据是动态的,则可能会处理很长时间。
请随时提出建议...