首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISplitviewcontroller不是rootview控制器

UISplitviewcontroller不是rootview控制器
EN

Stack Overflow用户
提问于 2010-10-12 03:33:32
回答 5查看 11.7K关注 0票数 11

我正在构建我的第一个iPad应用程序。我的需求之一就是处理UISplitviewcontroller和UINavigationController。

我们建议的视图层次结构是

(LoginView) ->UINavigationView(LandingView + CollectionView)->UISplitViewcontroller( DetailsView)。

我们的应用程序仅支持横向模式

我指的是这个SO Question(以及镀金应用程序),作为一个新手,我很难根据这个描述完成它。

所以我的问题是

1)如果有人可以给出小代码片段或教程参考,我如何实现同样的事情

2)根据苹果HIG,UISplitviewcontroller应该是根视图控制器,如果不是怎么办。苹果会拒绝我的应用吗?(显然GILT group已经被批准了)

3)我找到了MGSplitViewController,我能不能不用它作为根?

任何帮助都将不胜感激。作为一个新闻记者,我希望我的问题是真实的。

EN

回答 5

Stack Overflow用户

发布于 2010-10-12 16:31:18

如果你想使用开箱即用的splitView it ,它必须是根的;这里的任何欺骗都会破坏苹果的指导方针,或者表现出非常奇怪的行为。

MGSplitViewController完全是SplitViewController的自定义实现。这是非常好的,如果你需要这类东西,但一些功能是基于这一事实,我们的应用程序将定向。

或者,你也可以自己制作。我已经做过不止一次了,而且比听起来容易。

(LoginView) ->UINavigationView(LandingView + CollectionView)->UISplitViewcontroller( DetailsView)。

基于开箱即用的UISplitView,我建议:

  • 将splitView设置为根视图。应用程序一启动,
  • 就会弹出(非动画)全屏模式,并允许用户在其中导航loginView、LandingView和collectView;我还建议在此处使用navController。
  • 一旦用户准备好进入splitView,请在拆分视图的rootView控制器和DetailViewController中填充您想要的内容,然后动画模式输出。

Dave确实有一个观点,但我会从你的角度来看,你正在删除用户的方向选择;删除标准选择(如支持的方向),因为设计人员假设某些配置更有效,只会惹恼一些用户。

票数 12
EN

Stack Overflow用户

发布于 2010-10-17 20:19:39

我是通过在我的detailViewController中创建一个方法来实现的

代码语言:javascript
复制
-(void)popHomeScreen:(BOOL)animated//OPENS THE HOMESCREEN IN A MODAL DISPLAY
{

  firstRun=NO;
    //myViewControllerForPopOver init here

    myViewControllerForPopOver.modalPresentationStyle = UIModalPresentationFullScreen;  


        myViewControllerForPopOver.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;//simple anime

    if (animated) [self presentModalViewController:myViewControllerForPopOver animated:YES];
        else [self presentModalViewController:myViewControllerForPopOver animated:NO];  
    }

然后在detailViewControllers ViewDidAppear方法中调用它:

代码语言:javascript
复制
-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
if(firstRun)[self popHomeScreen:NO];
}

//YOU WILL ALSO NEED TO MAKE 'firstRun=YES' in viewDidLoad
//firstRun is a BOOL

至于根消失(留下一个很大的黑色空间),..thats是一个已知的bug。虽然我想了一段时间,这是因为在动画要自动绘制之前订购了一个动画。

此外,我发现如果我在splitView上弹出一个全屏模式,然后很快弹出另一个基于表单的模式(例如),那么全屏模式就不能正确绘制。

SplitViews就像你的婆婆,你并不是真的喜欢他们,当你不得不使用他们的时候,你不得不小心翼翼地绕过地雷。

票数 2
EN

Stack Overflow用户

发布于 2012-06-19 15:48:55

试试这个,它对我很有效。

1)在应用代理的didFinishLaunchingWithOptions中,将您的登录视图设置为根视图

代码语言:javascript
复制
self.window.rootViewController = self.loginViewController;  

同样,像模板一样初始化拆分视图(但不是添加到self.window)

代码语言:javascript
复制
MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil] autorelease];
UINavigationController *masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];

    DetailViewController *detailViewController = [[[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil] autorelease];
    UINavigationController *detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];

    self.splitViewController = [[[UISplitViewController alloc] init] autorelease];
    self.splitViewController.delegate = detailViewController;
    self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController ,detailNavigationController, nil];

2)在app的委托中添加一个交换视图控制器,将根视图交换为拆分视图控制器。

代码语言:javascript
复制
-(void)swapToViewControllers:(RootViewControllerType)viewType  
        self.window.rootViewController = self.splitViewController; 

3)在登录视图中调用swapToViewControllers。

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

https://stackoverflow.com/questions/3909349

复制
相关文章

相似问题

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