使用 UISegmentedControl 切换 viewController

Switching viewControllers with a UISegmentedControl

我正在尝试实现此 tutorial 中描述的代码,以使用 UISegmentedControl 切换 UIViewControllers。本教程使用 didFinishLaunchingWithOptions: 设置所有内容并显示第一个视图:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    NSArray * viewControllers = [self segmentViewControllers];

    UINavigationController * navigationController = [[UINavigationController alloc] init];
    self.segmentsController = [[SegmentsController alloc] initWithNavigationController:navigationController viewControllers:viewControllers];

    self.segmentedControl = [[UISegmentedControl alloc] initWithItems:[viewControllers arrayByPerformingSelector:@selector(title)]];

    [self.segmentedControl addTarget:self.segmentsController
                          action:@selector(indexDidChangeForSegmentedControl:)
                forControlEvents:UIControlEventValueChanged];

    [self firstUserExperience];

    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];

    return YES;
}

但是,在我的应用程序中,我想从 UITableViewController 中的 didSelectRowAtIndexPath: 调用它,但我不确定该怎么做。所以用户选择一行,然后出现一个新视图,我可以在顶部使用 UISegmentedControl 在视图之间切换。

我猜想需要改的那行是[window addSubview:navigationController.view];,其他的都一样。

如果我从我的 UITableViewController 调用该代码,而不是像教程中那样从 AppDelegate 调用该代码,会有什么等同?

(这不是 Switching ViewControllers with UISegmentedControl in iOS5 的副本,因为我想使用教程中的示例,而该问题涉及如何使用故事板进行设置。)

虽然我认为这不是一个好的解决方案(我更愿意创建一个单独的视图控制器,使用分段控件,并在那里实现切换逻辑),但答案是 是的:您可以从 table 视图控制器调用这段代码,将导航控制器的视图添加为其子视图,如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    NSArray * viewControllers = [self segmentViewControllers];
    
    UINavigationController * navigationController = [[UINavigationController alloc] init];
    self.segmentsController = [[SegmentsController alloc] initWithNavigationController:navigationController viewControllers:viewControllers];
    
    self.segmentedControl = [[UISegmentedControl alloc] initWithItems:[viewControllers arrayByPerformingSelector:@selector(title)]];
    self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
    
    [self.segmentedControl addTarget:self.segmentsController
                              action:@selector(indexDidChangeForSegmentedControl:)
                    forControlEvents:UIControlEventValueChanged];
    [self firstUserExperience];
    [self.view addSubview:navigationController.view];
    
}

我已经下载了您提到的示例(顺便说一句,它已经过时了),并将其包含在示例项目中。所以你可以检查一下。您需要做的就是添加一个新项目,然后 select 一行来调用相关代码段。

Check the code here

更新:

我添加了第二个使用单独视图控制器的示例,如果需要,请查看:Link

使用容器视图控制器。您所指的教程是在容器视图控制器之前使用的黑客攻击。作者真的应该把那个东西拉下来。