场景:
我有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次是在重新加载表格时)。我认为这可能会稍微影响性能,如果数据是动态的,则可能会处理很长时间。

请随时提出建议...

10-08 07:46