Подтвердить что ты не робот

Модальный переход, навигационная панель исчезает

Я использую Xcode 4.6.1 для кода на Objective-C. Я хочу знать, как я могу отображать навигационную панель, когда я создаю модальный переход между двумя контроллерами View, потому что я делаю segue в раскадровке, и когда я запускаю приложение, панель навигации второго контроллера просмотра исчезает, и У меня есть кнопка на этой панели, но я не вижу ее.

4b9b3361

Ответ 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];
}

Это должно дать вам то, что вы хотите, с помощью вашего модального контроллера.