我有一个标签栏 - > navigationcontroller结构。在其中一个选项卡中,我想使用位于导航栏中的UISegmentedControl在两个UIViewControllers(一个KalViewController和一个UITableViewController)之间进行切换。
目前,我有第三个UIViewController,它会在段值更改时弹出并推送相应的ViewControllers。我不认为这是正确的方法,它也会破坏导航堆栈(当我点击条形项目时,导航控制器进入根控制器,这将无法工作)。还有另一个与Kal Component相关的错误。
那么,正确的方式是什么?
答案 0 :(得分:3)
正确的做法是让控制器处理UISegmentedControl
将控制器的视图添加为子视图。
[self.view addSubview:controller.view];
您有责任发送viewWillAppear:
等等。
编辑:您正在讨论的偏移量可以使用以下方式进行调整:
controller.view.frame = CGRectMake(x, y, width, height);
编辑2:回应tc。的评论:
来自UISplitViewController
的文档:
拆分视图控制器介于应用程序窗口及其子视图控制器之间。因此,到可见视图控制器的所有消息都必须流经拆分视图控制器。这通常可以像您期望的那样工作,并且消息流应该相对直观。例如,仅当相应的子视图控制器实际出现在屏幕上时,才会发送视图外观和消失消息。因此,当首先以纵向方向显示拆分视图控制器时,它将仅调用最初显示的视图控制器的viewWillAppear:和viewDidAppear:方法。在显示弹出窗口或分割视图控制器旋转到横向方向之前,使用弹出窗口显示的视图控制器不会接收这些消息。
这并不神奇,没有理由不能自己编写类似的控制器。事实上,我已经做到了,它运作得很好。