3

我有一个 UITabBarController 应用程序,其中一个选项卡显示应用程序设置。这是一个带有多个细节控制器的 UISplitViewController,这些细节控制器会根据主控制器上的选择而改变。我的 detailViewControllers 有这些行允许主视图不断显示(或应该):

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.splitViewController.delegate = self;
}

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

这是我的问题:如果在点击设置选项卡时垫是纵向的,则仅显示初始详细视图。不是大师。将垫子旋转到横向和向后,大师显示得很好并停留在那里。

我无法弄清楚为什么会这样。XCode 4.5.2 master/detail 模板项目在我将detailController 更新为不隐藏master 后就没有这个问题了。

有任何想法吗?

4

4 回答 4

3

我只是遇到了同样的问题,但是通过仔细检查我的 UISplitViewController 委托是否在适当的时间设置了它。

请注意 XCode 示例项目的 AppDelegate 中所做的工作正常:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
        UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
        splitViewController.delegate = (id)navigationController.topViewController;
    }
    return YES;
}

它专门将 UISplitViewController 委托设置为特定的视图控制器。

出于我的目的,我将 AppDelegate 设置为 SplitViewControllerDelegate,因为我在 SplitViewController 中有一些稍微复杂的视图控制器管理。

因此,请确保在 application:didFinishLaunchingWithOptions: 中正确设置了委托,并且您应该没有问题。

于 2012-12-04T22:37:44.333 回答
1

为了解决这个问题,我必须执行我在原始问题中使用的相同代码,但将其放入子类 UISplitViewController。最初我将其放入详细视图中。

于 2012-12-05T17:00:27.053 回答
0

我为这个问题找到的简单解决方法是确保 AppDelegate 具有方向委托:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}
于 2013-02-18T10:33:34.263 回答
0

我知道为时已晚,但我想展示我如何摆脱这种情况,以便其他人可以从中受益。

- (IBAction)hideMaster
{
   // 1. set desired width for master view
   [self.splitViewController setValue:[NSNumber numberWithFloat:0.0] forKey:@"_masterColumnWidth"];

   // 2. splitViewController delegate to self
   self.splitViewController.delegate = self;

  // 3. give a smooth animation

  [UIView animateWithDuration:1.0 animations:^{
      [self.splitViewController.view layoutSubviews];
  }];
}

- (BOOL)splitViewController: (UISplitViewController*)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation  __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
{
    return NO;
}
于 2014-10-16T16:56:32.120 回答