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

时间:2012-10-11 15:07:26

标签: ios uiviewcontroller uisplitviewcontroller

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

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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];

答案 2 :(得分: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)

答案 3 :(得分:0)

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