首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIViewController加载UISplitViewController

UIViewController加载UISplitViewController
EN

Stack Overflow用户
提问于 2013-03-01 13:47:50
回答 1查看 1.3K关注 0票数 2

我有一个UINavigationController作为我的rootViewController,它包含一个UIViewController (为了这个讨论,我将称之为项目)。在项目中,我有一个按钮,当单击该按钮时,我希望加载一个UISplitViewController --最好是从底部向上滑动,尽管这只是一个很好的特性。

在UISplitViewController中,我有一个“关闭”按钮,我想删除UISplitViewController重新显示的项目。

据我所读,UISPlitViewControllers一定是rootViewControllers。考虑到这一点,到目前为止,我的代码如下。

AppDelegate

代码语言:javascript
复制
- (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

代码语言:javascript
复制
-(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

代码语言:javascript
复制
- (void)loadProjects
{
    // LOAD THE PROJECTS LIST BACK INTO VIEW
    ProjectsListViewController *projectsList = [[ProjectsListViewController alloc] init];

    [[[self parentViewController] view] removeFromSuperview];
    [[appDelegate window] setRootViewController:projectsList];
}

现在,我知道这是错误的,毫不奇怪,它正在对其他方法产生不利影响。事实上,当我键入这个文件时,我注意到项目页面在启动时被加载到navigationController中,但是当splitViewController关闭时直接放在窗口上。有人能帮我解释一下实现这一目标的正确方法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-01 19:39:20

苹果说,UISplitViewController必须是应用程序中最顶层的视图控制器,并且它必须在应用程序的整个生命周期中都在那里。正如您已经注意到的,如果您忽略了这一点,所有的东西都会破坏

有一些可供选择的方法不会这样中断,例如MGSplitViewController。搜索一下。如果您有时间,您甚至可以自己编写拆分视图控制器的实现,并处于完全控制状态。

如果您真的想以“疯狂”的方式使用苹果的UIsplitViewController,那么您可以将其安装为根VC (根据苹果的要求),并始终将其放在根上,但随后在顶部显示其他UI。然后隐藏模式UI以使拆分视图控制器出现。不过,这很讨厌,也很讨厌。

不久前,我问了一个可能令人感兴趣的相关问题:

在UISplitViewController和其他视图控制器之间切换的最佳方式?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15159296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档