IOS 8分割视图控制器iPhone模拟器竖屏详细视图返回按钮问题

4
这是斯坦福iPhone编程课的一项任务。该程序的目的是在tableViewControllers中浏览照片,并在ImageViewController中显示它们。
原始代码是在iOS 7环境下编写的,因此有两个用于iPhone和iPad的storyboard。前者使用tabViewController,后者使用splitViewController。
由于iOS 8允许我们在iPhone和iPad上使用splitViewController,因此我删除了iPhone storyboard,并将iPad storyboard用作通用布局。我的storyboard布局如下:哎呀,我不能在这里发布布局图,声望不够。 点击此处查看storyboard 我设置了两个segue,将两个tableViewController与最低级别的navigationViewController连接到“Show detail”。与Xcode模板“Master-detail application”中一样,我将splitViewController设置为委托自身,并将detailViewController(ImageViewController)的leftBarButtonItem设置为appDelegate中的displayModeButtonItem。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem;
    splitViewController.delegate = self;
    return YES;
}

问题出在iPhone竖屏模式下,ImageViewController左上角的“Master”返回按钮不会显示。在iPad模式下,一切正常。
我在这里链接了我的代码:此程序的代码。希望有人能帮忙。谢谢!
2个回答

1
我在ImageViewController(即详细视图)上使用了取消展开转场技术(以编程方式),并使用自定义的左侧栏按钮。
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Need a back button to appear when not in split view i.e. iPhone mode
    // Wire up to unwind segue action
    if (!self.splitViewController) {
        UIImage *image = [UIImage imageNamed:@"ImageViewControllerBarBackIndicatorDefault"];
        UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                initWithImage:image
                                style:UIBarButtonItemStylePlain
                                target:self
                                action:@selector(OnClick_btnBack:)];
        self.navigationItem.leftBarButtonItem = btnBack;
    }
}

-(IBAction)OnClick_btnBack:(id)sender {
    [self performSegueWithIdentifier:@"unwind" sender:self];
}

#pragma Unwind Segue

- (BOOL)canPerformUnwindSegueAction:(SEL)action
             fromViewController:(UIViewController *)fromViewController
                     withSender:(id)sender {
    return YES;
}

- (IBAction)unwindFromImageViewController:(UIStoryboardSegue *)unwindSegue {
    [self dismissViewControllerAnimated:YES completion:nil];
}

0
我遇到了完全相同的问题。我按照这里的教程 http://nshipster.com/uisplitviewcontroller/ 进行操作,但仍然无法解决。不确定问题出在哪里...
最终我选择了以编程方式进行切换。这不是最优雅的解决方案,但它可以工作。
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
    self.navigationController?.pushViewController(settingsViewController, animated: true)
} else {
    self.detailViewController?.setViewControllers([settingsViewController], animated: false)
}

我不理解Swift语法。第一行是为了判断userInterface是否为iPhone。这个问题是什么意思? - Rong Gong
navigationController 和 .pushViewController 之间的问号是什么意思?抱歉上次评论没有编辑完。 - Rong Gong
通过问号,您可以检查引用是否为nil,只有在引用不为nil时才调用方法(pushViewController或setViewControllers)。基本上,我将控制器推送到iPhone应用程序中,在iPad应用程序中更改当前的detailViewController。希望这能帮助您 :) - Prine
谢谢!所以你的settingViewController是主视图控制器吗? - Rong Gong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接