Я использую Xcode 4.6.1 для кода на Objective-C. Я хочу знать, как я могу отображать навигационную панель, когда я создаю модальный переход между двумя контроллерами View, потому что я делаю segue в раскадровке, и когда я запускаю приложение, панель навигации второго контроллера просмотра исчезает, и У меня есть кнопка на этой панели, но я не вижу ее.
Модальный переход, навигационная панель исчезает
Ответ 1
Модальные сегменты захватывают весь экран, поэтому любые навигационные панели, панели инструментов или панели вкладок, которые находятся в контроллере представления, будут закрыты. Если вы хотите панель навигации на этом модальном контроллере, вам нужно будет добавить ее специально для нее и добавить любые кнопки, которые вы хотите добавить к этой новой панели навигации (или панели инструментов). Если вы не хотите этого делать, то не представляйте его по-разному, сделайте толчок к нему.
Ответ 2
Просто добавьте еще один Navigation Controller
к вашему модульному контроллеру. Выполните шаги
- Выберите
Modal View Controller
- Перейдите к
Editor menu
- Выберите
Embed In
- Выберите
Navigation Controller
Запустите приложение. Теперь он должен работать отлично.
Надеюсь, что это решает вашу проблему.
Ответ 3
В iOS 8 есть лучший метод. Вы можете использовать адаптивные стили презентации:
- Используйте "Present as popover" segue
- Установите ваш контроллер для принятия протокола 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;
}
Swift:
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
Ответ 4
Вы можете просто сделать следующее, чтобы отобразить панель навигации:
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 ограничены, поэтому я не написал часть представления. Вы должны уметь это понять.;)
Надеюсь, это поможет!
Ответ 5
Существует более простой способ сделать это. Как и в предыдущих комментариях (но не объяснял все этапы), вам необходимо встроить свой желаемый контроллер представления в контроллер навигации, а затем настроить контроллер назначения в качестве контроллера навигации, затем контроллер навигации вызовет контроллер точки назначения.
Сначала вставьте VC в 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;
}
Надеюсь, это имеет смысл.
Ответ 6
быстрая версия:
Выполните следующие действия:
- Вставить VC в 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 } }
Ответ 7
Это, вероятно, потому, что у вас нет UINavigationController
в вашем модальном формате. Вы должны использовать один (или просто добавить панель навигации к вашему ViewController в раскадровке), и представить это модально.
Ответ 8
Вы можете добавить панель инструментов программно, выполнив следующее в -(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;
Затем вам нужно создать IBAction для нажатия кнопки "Готово", и это делается так:
-(IBAction)doneButtonPressed:(id)sender {
[self dismissModalViewControllerAnimated:YES];
}
Это должно дать вам то, что вы хотите, с помощью вашего модального контроллера.