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

问题描述 投票:0回答:1

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

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

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

ios objective-c cocoa-touch swift
1个回答
1
投票

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

一个简单的方法是使用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,使其看起来像苹果的动画。

© www.soinside.com 2019 - 2024. All rights reserved.