如何在ipad中隐藏UiSplitviewcontroller中的主视图

i07*_*707 26 ipad uisplitviewcontroller

是否有任何方法可以通过编程方式隐藏splitviewcontroller中的主视图.在我的应用程序中,第一个屏幕将是一个splitviewcontroller,我不需要任何拆分视图用于下一个屏幕.我怎么能做到这一点

Ant*_*ton 25

在SDK 5.0中,他们为UISplitViewControllerDelegate添加了新方法,可以轻松地为您完成此操作.只需像下一个那样实现它,你就不会看到主视图:

- (BOOL)splitViewController:(UISplitViewController*)svc 
   shouldHideViewController:(UIViewController *)vc 
              inOrientation:(UIInterfaceOrientation)orientation 
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

您可以看到旋转的唯一位置 - 主视图的一部分在动画期间可见.我已经用简单的方法解决了这个问题,只是在master中加载了空视图和黑视图.

PS:不确定这是否适用于i0707.但希望这对现在有同样问题的其他人有用.

  • 请注意,拆分视图控制器在其`delegate`属性更改时为所有方向调用此方法.如果要切换行为,可以通过将其设置为nil和back来强制重新加载.您仍然需要通过调用旋转方法来触发显示/隐藏. (2认同)

piz*_*ter 7

与杰克的答案相同,但是一个班轮.过去 - (void)setDetailItem:(id)newDetailItem {...}以关闭主人.

[[UIApplication sharedApplication] sendAction: self.navigationItem.leftBarButtonItem.action
                                           to: self.navigationItem.leftBarButtonItem.target
                                         from: nil
                                     forEvent: nil];
Run Code Online (Sandbox Code Playgroud)


Hig*_*ule 5

Matt Gemmell创建了一个名为"MGSplitViewController"的优秀自定义splitViewController.它非常容易实现,评论很多,并且包含许多普通splitViewController所没有的优秀功能(在横向视图中隐藏主视图,在横向视图中更改分割的位置,允许用户在运行时流畅地更改分割的大小,等等).

信息和演示:http://mattgemmell.com/2010/08/03/mgsplitviewcontroller-updated/

直接来源:https://github.com/mattgemmell/MGSplitViewController/


小智 5

SplitViewController提供的BarButtonItem是以编程方式隐藏主视图控制器的关键.

这段代码很危险!但优雅:)

导入目标c消息库

#import <objc/message.h>
Run Code Online (Sandbox Code Playgroud)

接下来,获取SplitViewController提供的UIBarButtonItem的句柄

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem
           forPopoverController:(UIPopoverController *)popoverController
    {
        barButtonItem.title = @"Master";
        [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];

        //Obtain handle to BarButtonItem
        [self setMasterButtonItem:barButtonItem];
    }
Run Code Online (Sandbox Code Playgroud)

然后当事件被触发时应该触发主视图控制器的自动解除,即

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

你可以这样做

objc_msgSend(self.masterButtonItem.target, self.masterButtonItem.action);
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是一个很好的解决方案,与其他一些发布的想法相比应该相对"安全".你甚至可以跳过`objc_msgSend()`并调用`[[UIApplication sharedApplication] sendAction:masterBarButtonItem.action to:masterBarButtonItem.target from:nil forEvent:nil]`. (5认同)