简体   繁体   中英

How to SubView a ViewController into a SubView of another ViewController

I have two ViewController .

One ViewControllers contain a UITableView . And another contains a UIButton .

I have created a SubView Programmatically.Now i want to SubView the ViewController which contains the UITableView in other when i Press UIButton.

I searched all over the net but cannot find any stable solution.

Currently i am trying this:

   bodyView =[[UIView alloc]initWithFrame:CGRectMake(0,120,containerView.frame.size.width,120)];

bodyView.backgroundColor = [UIColor redColor];

CustomTableVC *tableVC = [[CustomTableVC alloc]init];

[tableVC willMoveToParentViewController:self];
[bodyView addSubview:tableVC.view];
[self addChildViewController:tableVC];
[tableVC didMoveToParentViewController:self];

[containerView addSubview:bodyView];

You cannot.

You can only use the view property of your UIViewController to assign into UIView associated in your second UIViewController which is not recommended because UIViewController as per MVC pattern holds lot controller stuff which includes populating the view and resolving the inputs/touch, which is an overhead in your (using multiple of viewcontrollers without needed) case.

You need to use one UIViewController . Add UITableView only in it, and UIButton only in it. You only use one controller and multiple views.

The other approach, if you do not want to change your code, may also use ContainerView . But in that case you need to create separate ViewControllers for UIButton and UITableView. And if you want to fetch data inbetween the ViewControllers, that will be a huge pain and also a bad software design with so much coupling and less encapsulation.

i have tried this one and it's working for me.

@IBAction func moveToOther() { 


var otherController = OtherViewController()

        var bodyView = UIView(frame: CGRectMake(0,120, self.view.frame.size.width, 120))
        bodyView.backgroundColor = UIColor.redColor();
        bodyView.layer.borderWidth = 1.0

        let tblCntrl = UITableViewController()
        bodyView.addSubview(tblCntrl.tableView)
        bodyView.clipsToBounds = true
        otherController.addChildViewController(tblCntrl)
        tblCntrl.didMoveToParentViewController(otherController)

        otherController.view.addSubview(bodyView)

        self.navigationController?.pushViewController(otherController, animated: true)

}

You should use only one view controller that contains both the table view & UIButton. By default hide the table view. Just hide the button and show the table view when the button is clicked.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM