我有一个UINavigationController作为我的rootViewController,它包含一个UIViewController (为了这个讨论,我将称之为项目)。在项目中,我有一个按钮,当单击该按钮时,我希望加载一个UISplitViewController --最好是从底部向上滑动,尽管这只是一个很好的特性。
在UISplitViewController中,我有一个“关闭”按钮,我想删除UISplitViewController重新显示的项目。
据我所读,UISPlitViewControllers一定是rootViewControllers。考虑到这一点,到目前为止,我的代码如下。
AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
...
// LOAD THE PROJECTS PANEL ROOT VIEW CONTROLLER INTO THE WINDOW
ProjectsListViewController *projects = [[ProjectsListViewController alloc] init];
navigationController = [[UINavigationController alloc] initWithRootViewController:projects];
[window setRootViewController:navigationController];
[window makeKeyAndVisible];
return YES;
}ProjectsViewController
-(IBAction)loadDetails
{
ProjectNavigationController *projectNavPanel = [[ProjectNavigationController alloc] init];
ProjectDetailController *projectDetailPanel = [[ProjectDetailController alloc] init];
ProjectSplitViewController *splitRootController = [[ProjectSplitViewController alloc] init];
[splitRootController setViewControllers:[NSArray arrayWithObjects:projectNavPanel, projectDetailPanel, nil]];
[[self view] removeFromSuperview];
[[appDelegate window] setRootViewController:splitRootController];
}UISplitViewController Naviagaion
- (void)loadProjects
{
// LOAD THE PROJECTS LIST BACK INTO VIEW
ProjectsListViewController *projectsList = [[ProjectsListViewController alloc] init];
[[[self parentViewController] view] removeFromSuperview];
[[appDelegate window] setRootViewController:projectsList];
}现在,我知道这是错误的,毫不奇怪,它正在对其他方法产生不利影响。事实上,当我键入这个文件时,我注意到项目页面在启动时被加载到navigationController中,但是当splitViewController关闭时直接放在窗口上。有人能帮我解释一下实现这一目标的正确方法吗?
谢谢
发布于 2013-03-01 19:39:20
苹果说,UISplitViewController必须是应用程序中最顶层的视图控制器,并且它必须在应用程序的整个生命周期中都在那里。正如您已经注意到的,如果您忽略了这一点,所有的东西都会破坏。
有一些可供选择的方法不会这样中断,例如MGSplitViewController。搜索一下。如果您有时间,您甚至可以自己编写拆分视图控制器的实现,并处于完全控制状态。
如果您真的想以“疯狂”的方式使用苹果的UIsplitViewController,那么您可以将其安装为根VC (根据苹果的要求),并始终将其放在根上,但随后在顶部显示其他UI。然后隐藏模式UI以使拆分视图控制器出现。不过,这很讨厌,也很讨厌。
不久前,我问了一个可能令人感兴趣的相关问题:
https://stackoverflow.com/questions/15159296
复制相似问题