我有两个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];
答案 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。 默认情况下隐藏表视图。 只需隐藏按钮,并在单击按钮时显示表格视图。