模态继续,导航栏消失
我正在使用Xcode 4.6.1在Objective-C上进行编码。 我想知道当我在2个视图控制器之间创build一个模态时,我怎样才能保持显示的导航条,因为我在故事板中做了segue,当我运行应用程序时,第二个视图控制器的导航栏消失了,我在栏上有一个完成的button,但是我看不到它。
模态段将占据整个屏幕,因此呈现控制器中的任何导航栏,工具栏或选项卡都将被遮盖。 如果你想在这个模式控制器上有一个导航栏,你需要添加一个专门的导航栏,并添加你想要的新的导航栏(或工具栏)的button。 如果你不想这样做,那么不要模式地展示它,推动它。
只需将另一个Navigation Controller
添加到您的模式视图控制器。 按照步骤
- select
Modal View Controller
- 转到
Editor menu
- select
Embed In
- select
Navigation Controller
运行应用程序。 现在它应该完美地工作。
希望这可以解决你的问题。
在iOS 8中有一个更好的方法。 您可以使用自适应表示样式:
- 使用“现在作为popover”继续
- 设置你的控制器采用UIPopoverPresentationControllerDelegate协议
- 实施2种方法
Objective-C的:
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { return UIModalPresentationFullScreen; } - (UIViewController *)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style { UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: controller.presentedViewController]; return navController; }
迅速:
UIPopoverPresentationControllerDelegate func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return UIModalPresentationStyle.FullScreen } func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? { var navController = UINavigationController(rootViewController: controller.presentedViewController) return navController }
Swift 4:
extension MyViewController: UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return UIModalPresentationStyle.fullScreen } func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? { return UINavigationController(rootViewController: controller.presentedViewController) } }
在准备segue方法中设置委托:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if let adpostVC = segue.destinationViewController as? XXXController { let popPC = adpostVC.popoverPresentationController popPC?.delegate = self
有一个更简单的方法来做到这一点。 像以前的评论说的(但没有解释所有的步骤),你需要将你想要的目标视图控制器embedded到导航控制器中,然后将目标视图控制器设置为导航控制器,然后导航控制器调用目标视图控制器。
首先,将VCembedded到NavVC中。 然后你必须编写代码来将segue目标设置为Nav VC。
代码如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { UINavigationController *nav = segue.destinationViewController; AddTriviaVC *triv = [[AddTriviaVC alloc]init]; triv = nav.viewControllers[0]; triv.location = self.location; }
我希望这是有道理的。
迅捷版:
按照步骤:
- 将VCembedded到NavigationController中
-
重写prepareForSegue()
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "goToYourController" { let navigation: UINavigationController = segue.destinationViewController as! UINavigationController var vc = YourViewController.init() vc = navigation.viewControllers[0] as! YourViewController //if you need send something to destnation View Controller //vc.delegate = self } }
您可以简单地执行以下操作来显示导航栏:
Objective-C的
UINavigationController alloc]initWithRootViewController:modalVC];
SWIFT 3
let modelVC = self.storyboard?.instantiateViewController(withIdentifier: "modalVC") as! ModalVC let navBarOnModal: UINavigationController = UINavigationController(rootViewController: modalVC) self.present(navBarOnModal, animated: true, completion: nil)
这将显示导航栏的模态视图控制器。 关于Objective-C的知识是有限的,所以我没有写出呈现的部分。 你应该能够找出一个。 ;)
希望这可以帮助!
这可能是因为你的模态中没有UINavigationController
。 你应该使用一个(或只是添加一个导航栏到你的ViewController在故事板),并以模态的方式呈现。
您可以通过在-(void)viewDidLoad
执行以下操作来以编程方式添加工具栏
NSInteger tbHeight = 50; tb = [[UIToolbar alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - tbHeight), self.view.frame.size.width, tbHeight)]; tb.translucent = YES; emailButton = [[UIBarButtonItem alloc] initWithTitle:@"Email Results" style:UIBarButtonItemStyleBordered target:tvController action:@selector(actionSheet:)]; UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneButtonPressed:)]; NSArray *barButton = [[NSArray alloc] initWithObjects:emailButton,flexibleSpace,doneButton,nil]; [tb setItems:barButton]; [self.view addSubview:tb]; barButton = nil;
然后你将不得不创build一个IBAction来按下完成button,它是这样完成的:
-(IBAction)doneButtonPressed:(id)sender { [self dismissModalViewControllerAnimated:YES]; }
这应该给你你想要的模式视图控制器。