使用UISegmentedControl在UIViewControllers之间切换

时间:2011-04-05 16:31:09

标签: iphone sdk uiviewcontroller uisegmentedcontrol

我有一个标签栏 - > navigationcontroller结构。在其中一个选项卡中,我想使用位于导航栏中的UISegmentedControl在两个UIViewControllers(一个KalViewController和一个UITableViewController)之间进行切换。

目前,我有第三个UIViewController,它会在段值更改时弹出并推送相应的ViewControllers。我不认为这是正确的方法,它也会破坏导航堆栈(当我点击条形项目时,导航控制器进入根控制器,这将无法工作)。还有另一个与Kal Component相关的错误。

那么,正确的方式是什么?

1 个答案:

答案 0 :(得分:3)

正确的做法是让控制器处理UISegmentedControl将控制器的视图添加为子视图。

[self.view addSubview:controller.view];

您有责任发送viewWillAppear:等等。

编辑:您正在讨论的偏移量可以使用以下方式进行调整:

controller.view.frame = CGRectMake(x, y, width, height);

编辑2:回应tc。的评论:

来自UISplitViewController的文档:

将消息转发到其子视图控制器

  

拆分视图控制器介于应用程序窗口及其子视图控制器之间。因此,到可见视图控制器的所有消息都必须流经拆分视图控制器。这通常可以像您期望的那样工作,并且消息流应该相对直观。例如,仅当相应的子视图控制器实际出现在屏幕上时,才会发送视图外观和消失消息。因此,当首先以纵向方向显示拆分视图控制器时,它将仅调用最初显示的视图控制器的viewWillAppear:和viewDidAppear:方法。在显示弹出窗口或分割视图控制器旋转到横向方向之前,使用弹出窗口显示的视图控制器不会接收这些消息。

这并不神奇,没有理由不能自己编写类似的控制器。事实上,我已经做到了,它运作得很好。