iphone - 修改呈现模态视图的 View Controller 的 navigationItem?

标签 iphone ios ipad uinavigationcontroller uisplitviewcontroller

我在基于 UISplitViewController 的应用程序中呈现模态视图 Controller 。我已将默认的详细 View 替换为 UINavigationController

在我的 UINavigationController 中,我实现了一些方法来在左上角显示 Split View Controller 的“主”按钮。问题是,当设备方向发生变化而模态视图可见时,该按钮不会从我的导航 Controller 的主视图中消失。

可能导致此问题的原因是什么?

编辑:

我已将按钮的模板逻辑移动到 UINavigationController 的子类中。问题是,当 visibleViewController 呈现一个 modalViewcontroller 时, 变成了 visibleViewController。因此,出于某种原因,我的代码无法正确删除按钮。这是我的代码:

代码:

#pragma mark - Split view support

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController: (UIPopoverController *)pc{
    barButtonItem.title = NSLocalizedString(@"Menu", @"");

    //
    //  TODO: Handle cases where there is
    //  a modal view controller that is 
    //  being shown to the user.
    //


    [((UIViewController *)[self.viewControllers objectAtIndex:0]).navigationItem  setLeftBarButtonItem:barButtonItem];

    self.popoverController = pc;

}

// Called when the view is shown again in the split view, invalidating the button and popover controller.
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{

    [self.visibleViewController.navigationItem setLeftBarButtonItem:nil];
    [self.popoverController dismissPopoverAnimated:YES];
    self.popoverController = nil;
}

//
//  Preserve navigation items across detail 
//  view loads in portrait mode.
//

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated{

    UIBarButtonItem *barItem = nil;

    if (self.visibleViewController.navigationItem.leftBarButtonItem != nil) {

        barItem = self.visibleViewController.navigationItem.leftBarButtonItem;
    }

    [super setViewControllers:viewControllers animated:animated];

    if (barItem != nil) {
        [self.visibleViewController.navigationItem setLeftBarButtonItem:barItem];
    }
}

最佳答案

我认为不可能使用 SplitViewController 并在导航项中显示主视图的按钮。 UISplitViewControllerDelegate 专门设计用于与 UIBarButtonItem 一起使用,您可能必须实现自定义弹出 Controller 才能使其正常工作。

关于iphone - 修改呈现模态视图的 View Controller 的 navigationItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481749/

相关文章:

iphone - 如何将文件上传到webservice

iOS7-iPhone 呈现 View Controller - UIPickerView

ios - CoreData,递归结构……我觉得

ios - iPad 调试过程中空气结冰

iphone - 检查照片库的授权状态

iphone - 如何获取 UILabel 将截断文本的范围

iPhone 的 C++ 编译(STL 问题?)

iphone - 如何以编程方式更改 iPhone 设置

iphone - 具有直角的 UITableViewStyleGrouped

objective-c - 无论设备方向如何,在 SplitView 中隐藏主视图 Controller