UISplitViewController仅在纵向视图中获取详细信息VC

时间:2014-11-13 05:35:30

标签: ios uisplitviewcontroller

我最近从我的应用程序中删除了标签栏,转而使用我自己编写的“滑出式”菜单。它似乎工作得很好,除了我在应用程序中使用的一个分割视图控制器在纵向方向上无法在iPad上正常工作(风景很好)。我看到的问题是详细信息VC ONLY 被加载到纵向视图中,其中两个VC在横向视图中正确加载。这是在iOS7上。

所以,这是我正在使用的代码。此代码已从AppDelegate(先前)移至根VC。有一些变化,但相对较小。它与标签栏一起工作正常,但是使用这个新的滑出菜单(即表视图)我有这个问题。我只包括我认为相关的代码部分。

AdminMasterViewController *adminMasterVC = [[AdminMasterViewController alloc] init];
UINavigationController *adminMasterNav = [[UINavigationController alloc] init];
adminMasterNav.viewControllers = [NSArray arrayWithObjects:adminMasterVC, nil];
adminMasterNav.view.frame = CGRectMake(0,0,[Utility screenWidth],[Utility screenHeight]);

AdminDetailViewController *adminDetailVC = [[AdminDetailViewController alloc] init];
UINavigationController *adminDetailNav = [[UINavigationController alloc] init];
adminDetailNav.viewControllers = [NSArray arrayWithObjects:adminDetailVC, nil];
adminDetailNav.view.frame = CGRectMake(0,0,[Utility screenWidth],[Utility screenHeight]);

UISplitViewController *adminSplitVC = [[UISplitViewController alloc] init];
adminSplitVC.viewControllers = [NSArray arrayWithObjects: adminMasterNav, adminDetailNav, nil];
adminSplitVC.delegate = self;
adminSplitVC.title = @"Admin";
adminSplitVC.view.frame = CGRectMake(0,0,[Utility screenWidth],[Utility screenHeight]);

vcArray = [NSArray arrayWithObjects:homeVC, adminSplitVC, expressiveNav, receptiveNav, typerNav, nil];

(最后一行构建项目中所有VC的数组;创建这些VC的代码已被省略)。

选择VC后,它将显示为子VC,如下所示:

UIViewController *vc;
if ([selected isEqualToString:@"Home"])
{
    vc = [vcArray objectAtIndex:VCHome];
}
else if ([selected isEqualToString:@"Administrator"])
{
    vc = [vcArray objectAtIndex:VCAdmin];
}

... (others listed here)

[self.view addSubview:vc.view];
[self addChildViewController:vc];
[vc didMoveToParentViewController:self];

根据我的阅读,不使用标签栏可能存在一些问题,但文章很混乱,因为其中很多都是过时的。我会理解有关这个问题的任何意见或建议,因为我已经阅读了我能找到的所有内容,并且不知道从哪里开始。 TIA。

1 个答案:

答案 0 :(得分:0)

经过几天的阅读和尝试不同的事情,发布问题一小时后我解决了这个问题。万一其他人遇到同样的问题,这就是解决方案:

我将UISplitViewController子类化并使其成为自己的委托。

然后,这个委托方法解决了它:

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
    return NO;
}