拆分视图控制器不作为根视图控制器

我有一个需要用户登录的应用程序。 用户登录后,我想使用Split View Controller来显示数据。 诀窍是,Apple不希望我推送SplitViewController ,因为他们希望它成为Root View Controller。 从我的角度来看,没关系,但我需要用户先登录。

有人知道除了创建我自己的SplitViewController类的VC 之外的任何解决方法吗?

如果需要,您仍然可以更改根视图控制器。 您最初可以将根视图控制器设置为显示登录屏幕,然后将其替换为拆分视图控制器。 或者,您可以在分割视图控制器的顶部以模态方式显示登录屏幕。

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

假设您正在使用故事板,并为拆分视图控制器提供了一个标识符(SplitView)

您始终可以添加虚拟viewController并在dummyView Controller上推送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]; 

这对我有帮助(通过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)