2012-10-11 234 views
4

我有一个应用程序需要用户登录。一旦用户登录,我想使用分割视图控制器来显示数据。诀窍是,苹果不希望我推动SplitViewController,因为他们希望它成为根视图控制器。从我的角度来看,没关系,但我需要用户先登录。分割视图控制器不作为根视图控制器

任何人都知道任何解决方法除了创建我自己的SplitViewController -like VC?

回答

0

如果需要,仍然可以更改根视图控制器。您最初可以设置根视图控制器来显示您的登录屏幕,然后用分割视图控制器替换它。或者,您可以在分屏视图控制器的顶部以模态形式呈现登录屏幕。

+2

这是一个不错的主意,但是从iOS8上并起来,在上面没有按呈现出新的画面看起来不是'即时'的,所以它会告诉你一段时间的分屏,然后登录到顶端,这只是计划的丑陋。 –

1
UISplitViewController *svc = (UISplitViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"SplitView"]; 
[self presentModalViewController:svc animated:YES]; 

假设使用的是故事板,并已给出的拆分视图控制器的标识符(SPLITVIEW)

+0

我需要在哪里包含此代码?在Appdelegate中? – Shahnawaz

+0

当我这样做的应用程序崩溃:***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'应用程序试图呈现一个拆分视图控制器' – Bocaxica

1

您可以随时添加一个虚设的viewController和上推dummyView控制器的SPLITVIEW控制器,然后推DummyView控制器在你目前的视图控制器的顶部,例如

AppDelegate *appdelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; 
self.splitViewController = [[[UISplitViewController alloc] init] autorelease]; 
self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController]; 
self.splitViewController.delegate = detailViewController; 
UIViewController *dummyView = [[UIViewController alloc]init]; 
[dummyView.view addSubview:self.splitViewController.view]; 
[appdelegate.rootNavigationController setNavigationBarHidden:YES animated:NO]; 
[appdelegate.rootNavigationController pushViewController:dummyView animated:YES]; 
+0

LOL!看起来不错,什么hack哈哈:-) – Michal

1

这帮助我(通过Xamarin):

public override bool ShouldPerformSegue (string segueIdentifier, NSObject sender) 
    { 
     if (segueIdentifier != ReportSettingsSegue) 
      return base.ShouldPerformSegue (segueIdentifier, sender); 

     bool isOk = ProcessLogin(); 
     var svc = (ReportSplitViewController)Storyboard.InstantiateViewController ("ReportSplitViewController"); 
     View.Window.RootViewController = svc; 

     return isOk; 
    } 

Segue公司按 “登录” 我的应用程序的第一个屏幕上的按钮后执行。

你也必须在故事板中的身份检查器中设置分割控制器识别ID(故事板ID)(对我来说是ReportSplitViewController)

相关问题