使用 UISegmentedControl 切换 viewController
Switching viewControllers with a UISegmentedControl
我正在尝试实现此 tutorial 中描述的代码,以使用 UISegmentedControl
切换 UIViewController
s。本教程使用 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 一行来调用相关代码段。
更新:
我添加了第二个使用单独视图控制器的示例,如果需要,请查看:Link
使用容器视图控制器。您所指的教程是在容器视图控制器之前使用的黑客攻击。作者真的应该把那个东西拉下来。
我正在尝试实现此 tutorial 中描述的代码,以使用 UISegmentedControl
切换 UIViewController
s。本教程使用 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 一行来调用相关代码段。
更新:
我添加了第二个使用单独视图控制器的示例,如果需要,请查看:Link
使用容器视图控制器。您所指的教程是在容器视图控制器之前使用的黑客攻击。作者真的应该把那个东西拉下来。