如何将ViewController SubView转换为另一个ViewController的SubView

时间:2015-06-16 10:45:36

标签: ios objective-c uitableview uiview

我有两个ViewController

一个ViewControllers包含UITableView。另一个包含UIButton

我已经以编程方式创建了SubView。现在,当我按下UIButton时,我想SubView ViewController包含UITableView的{​​{1}}。

我在网上搜索但找不到任何稳定的解决方案。

目前我正在尝试这个:

   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];

3 个答案:

答案 0 :(得分:1)

你做不到。

您只能使用view的{​​{1}}属性分配到第二个UIViewController中关联的UIView,这是不推荐的,因为根据MVC模式的UIViewController包含很多控制器内容,包括填充视图并解决输入/触摸,这是您(使用多个视图控制器,不需要)情况下的开销。

您需要使用一个UIViewController。仅在其中添加UITableView,仅在其中添加UIButton。 您只能使用一个控制器和多个视图。

另一种方法,如果您不想更改代码,也可以使用UIViewController。但在这种情况下,您需要为UIButton和UITableView创建单独的ViewControllers。如果你想在ViewControllers之间获取数据,这将是一个巨大的痛苦,也是一个糟糕的软件设计,具有如此多的耦合和较少的封装。

答案 1 :(得分:0)

我试过这个,它对我有用。

@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)

}

答案 2 :(得分:0)

您应该只使用一个包含表格视图和视图的视图控制器。的UIButton。 默认情况下隐藏表视图。 只需隐藏按钮,并在单击按钮时显示表格视图。