情境: 我有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的视图&我知道这是一个错误的地方,但我没有得到如何,在哪里和做什么,以便在ParentViewController的功能之前调用childViewController的函数?
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。
答案 0 :(得分:0)
最后,我想出了一些有效但仍然需要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
}
专业版& CON' S 强>
临' S
最大的好处是你可以完成工作。
精读' S
正如您所看到的那样,ChildVC的视图被添加了2次(1表示默认单元格大小为height变量&第2次表格重新加载时)。我觉得这可能会略微影响性能。如果数据是动态的,它可能会处理一段时间。
请随时提出建议......