【问题标题】:Split View Controller delegate and toolBar button拆分视图控制器委托和工具栏按钮
【发布时间】:2014-04-28 14:39:08
【问题描述】:

我正在使用普通的委托方法以纵向模式显示一个按钮,以这种方式显示/隐藏UITableView

我在UITableViewController 中使用这个:

 // Split View Controller
 - (void)awakeFromNib
 {
     [super awakeFromNib];
     self.splitViewController.delegate = self;
 }

 - (id <SplitViewBarButtonItemPresenter>)splitViewBarButtonItemPresenter
{
    id detailVC = [self.splitViewController.viewControllers lastObject];
    if (![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]) {
        detailVC = nil;
    }
    return detailVC;
}

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

- (void)splitViewController:(UISplitViewController *)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem *)barButtonItem
       forPopoverController:(UIPopoverController *)pc
{
    barButtonItem.title = @"Table of Data";
    [self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;
}

- (void)splitViewController:(UISplitViewController *)svc
     willShowViewController:(UIViewController *)aViewController
  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    [self splitViewBarButtonItemPresenter].splitViewBarButtonItem = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

在我的DetailViewControllerS(多个)中,我正在使用

- (void)handleSplitViewBarButtonItem:(UIBarButtonItem *)splitViewBarButtonItem
{
    NSMutableArray *toolbarItems = [self.toolbar.items mutableCopy];
    if (_splitViewBarButtonItem) [toolbarItems removeObject:_splitViewBarButtonItem];
    if (splitViewBarButtonItem) [toolbarItems insertObject:splitViewBarButtonItem atIndex:0];
    self.toolbar.items = toolbarItems;
    _splitViewBarButtonItem = splitViewBarButtonItem;
}

- (void)setSplitViewBarButtonItem:(UIBarButtonItem *)splitViewBarButtonItem
{
    if (splitViewBarButtonItem != _splitViewBarButtonItem) {
        [self handleSplitViewBarButtonItem:splitViewBarButtonItem];
    }
}

问题是,如果通过“替换 Segue”更改详细视图,则在新的 DetailViewController 中显示/隐藏 UITableView 的按钮会消失,除非我将 iPad 旋转到横向,然后再转回纵向! 或者即使我去另一个ViewController,它不应该显示按钮,然后回到我的主要DetailView,除非我旋转设备,否则按钮不会显示。 如果我处于纵向模式,我该如何解决它,使按钮始终出现??

【问题讨论】:

    标签: ios objective-c uitableview uisplitviewcontroller


    【解决方案1】:

    通常你不应该在这种情况下使用替换segue。

    这些委托方法加上 NavigationViewController 足以显示 barbutton 项。

    【讨论】: