这是斯坦福iPhone编程课程的作业。该程序的目的是浏览tableViewControllers中的照片并将它们显示在ImageViewController中。
原始代码是在iOS 7环境中编写的,因此它有两个适用于iPhone和iPad的故事板。前者使用tabViewController,后者使用splitViewController。
由于iOS 8允许我们在iPhone和iPad中使用splitViewController,因此我只删除iPhone故事板,并将iPad作为通用布局使用。我的故事板布局是这样的:哎呀,我不能在这里发布布局图片,没有足够的声誉。 click here to see the storyboard
我设置了两个segues,它们将两个tableViewController与最低的navigationViewController链接到" 显示细节"。和Xcode模板" Master-detail应用程序"一样,我将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纵向模式," Master"后退按钮不会出现在ImageViewController的左上角。在iPad模式下,一切正常。
我在这里链接我的代码:code for this program。希望有人能提供帮助。谢谢!
答案 0 :(得分:1)
我在Image ViewController上使用了unwind segue技术(以编程方式)和自定义左栏按钮(即详细视图)。
- (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];
}
答案 1 :(得分:0)
我遇到了完全相同的问题。我从这里http://nshipster.com/uisplitviewcontroller/开始遵循教程,但它仍然无效。不确定是什么问题..
我最终以编程方式进行切换。这不是最优雅的解决方案,但它正在发挥作用。
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
self.navigationController?.pushViewController(settingsViewController, animated: true)
} else {
self.detailViewController?.setViewControllers([settingsViewController], animated: false)
}