我尝试使用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的重复,因为我想使用教程中的示例,该问题涉及如何使用故事板进行设置。)
答案 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];
}
我已经下载了您提到的示例(顺便说一下已经过时了),并将其包含在示例项目中。所以你可以看看。您需要做的就是添加一个新项目,然后选择一行来调用相关的代码段。
我添加了第二个使用单独视图控制器的示例,如果需要,请查看它:Link
答案 1 :(得分:1)
使用容器视图控制器。您引用的教程是在容器视图控制器之前使用的hack。作者应该真的把这件事拉下来。