在MGSplitViewController中以纵向模式显示主视图和详细视图

时间:2011-10-26 16:22:16

标签: ipad

我目前正在我的一个应用程序中集成MGSplitViewController并且它正常工作。

但是我想修改它当前在纵向模式下显示的方式。所以我想在纵向模式下应用程序打开它时应该同时显示主控制器和详细视图控制器。所以按下导航栏按钮它会再次隐藏并显示左侧根视图控制器。

所以我已将代码更改为

   - (BOOL)shouldShowMasterForInterfaceOrientation:(UIInterfaceOrientation)theOrientation
    {
    // Returns YES if master view should be shown directly embedded in the splitview, instead of hidden in a popover.
    //return ((UIInterfaceOrientationIsLandscape(theOrientation)) ? _showsMasterInLandscape : _showsMasterInPortrait);

     return YES;   
    }

现在,纵向和横向模式都显示了我想要的根视图和详细视图控制器,但问题是导航栏按钮无法隐藏&显示左侧根视图控制器。

任何团体都这样做了吗?

1 个答案:

答案 0 :(得分:1)

您可以使用MGSplitViewController的{​​{1}}属性来打开和关闭应用程序代码,而不是修改showsMasterInPortrait源或对其进行子类化。这对我来说一直很好。

更新详情:

我不会使用拆分视图控制器提供的条形按钮项 - 它对我们的目的并没有太大用处。相反,请设置您自己的按钮,并使用相关操作切换拆分视图控制器的MGSplitViewController属性。要到达后者,请连接出口物业。如果您要在横向中隐藏按钮,您还需要按钮本身的插座。确保在IB中也正确连接。

在标题中,这意味着:

showsMasterInPortrait

在课堂定义中:

@property(nonatomic,assign) IBOutlet MGSplitViewController* splitVC;
@property(nonatomic,assign) IBOutlet UIBarButtonItem* toggleButton;
- (IBAction)toggleMasterViewTouched:(id)sender;

如果您只希望按钮以纵向显示,则还需要在自动旋转时隐藏它,因此响应旋转事件(仍在详细控制器中):

@synthesize splitVC, toggleButton;

- (IBAction)toggleMasterViewTouched:(id)sender
{
  BOOL master_shown = !self.splitVC.showsMasterInPortrait;
  // Note: toggle the button's label text and/or icon between "hide" and "show" versions
  self.toggleButton.title = master_shown ? @"Hide Master" : @"Show Master";

  self.splitVC.showsMasterInPortrait = master_shown;
}

这应该是所有人。您还需要为showsMasterInPortrait设置默认值,并在某处设置切换按钮标签和可见性,可能在- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { // hide when in landscape, show when in portrait self.toggleButton.hidden = UIInterfaceOrientationIsLandscape(toInterfaceOrientation); }