在代码中模拟分割视图控制器的显示模式按钮项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在代码中模拟分割视图控制器的显示模式按钮项相关的知识,希望对你有一定的参考价值。

拆分视图控制器提供如下显示模式按钮项:

其中隐藏主视图并展开详细视图。

我的问题是,有没有办法在代码中模拟这个按钮的动作?

答案

同样,我也在寻找这个问题的答案。遗憾的是没有多少关于此事。

一个简单的方法是使用UISplitViewController Delegate:

-(UISplitViewControllerDisplayMode)targetDisplayModeForActionInSplitViewController:(UISplitViewController *)svc{

创建我们想要的按钮并使用@Selector处理动作

以下代码可能会有所帮助:

-(UISplitViewControllerDisplayMode)targetDisplayModeForActionInSplitViewController:(UISplitViewController *)svc{
if (svc.displayMode == UISplitViewControllerDisplayModePrimaryHidden) {
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Login" style:UIBarButtonItemStylePlain target:self action:@selector(showMenu)];
}else{
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight || [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft) {
        self.navigationItem.leftBarButtonItem = nil;
    }
}
return UISplitViewControllerDisplayModeAutomatic;
}

发生了什么?

  • 首先,我们检查displayMode是否是PrimaryHiddenAllVisible,并根据我们自定义我们的导航按钮。
  • 然后在下面我们检查设备方向,以便可以填充默认的DisplayMode按钮。

那么我们按钮的选择器方法可以是:

-(void)showMenu{

if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight || [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft) {
    if (self.splitViewController.preferredDisplayMode == UISplitViewControllerDisplayModePrimaryHidden) {
        self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
    } else {
        self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
    }
}
else{
    self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay;
}

[UIView animateWithDuration:0.5 animations:^ {
    [self.splitViewController.view layoutIfNeeded];
}];
}

添加了UIView animation,使其看起来像苹果的动画。

以上是关于在代码中模拟分割视图控制器的显示模式按钮项的主要内容,如果未能解决你的问题,请参考以下文章

模态视图控制器工具栏的设置项

Fragment的ListView项接口定义中的按钮?

不要在片段中显示列表视图项

从另一个片段返回时如何在视图页面中显示片段?

从单个按钮从多个片段中提取数据

标签栏控制器未显示栏按钮项