使用UISegmentedControl切换viewControllers

时间:2015-04-19 19:32:17

标签: ios objective-c uinavigationcontroller uisegmentedcontrol

我尝试使用UIViewController来实现此tutorial中描述的代码以切换UISegmentedControl。本教程使用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;
}

但是,在我的应用中,我想在didSelectRowAtIndexPath:内的UITableViewController拨打此电话,但我不知道该怎么做。因此,用户选择一行,然后会出现一个新视图,我可以使用顶部的UISegmentedControl在视图之间切换。

我想需要改变的行是[window addSubview:navigationController.view];,其余的都可以是相同的。

如果我从我的UITableViewController而不是教程中的AppDelegate调用该代码,该等效代码是什么?

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

2 个答案:

答案 0 :(得分:3)

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

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

}

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

Check the code here

更新

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

答案 1 :(得分:1)

使用容器视图控制器。您引用的教程是在容器视图控制器之前使用的hack。作者应该真的把这件事拉下来。