在调用ParentViewController的委托方法之前,将消息从ChildViewController传递到ParentViewController

时间:2016-02-25 14:05:12

标签: ios swift uitableview uiviewcontroller delegates

情境: 我有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。

1 个答案:

答案 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次表格重新加载时)。我觉得这可能会略微影响性能。如果数据是动态的,它可能会处理一段时间。

请随时提出建议......