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

Представление контроллеров представлений на контроллерах отдельных точек зрения препятствует

Я использую xcode 5.1.1 с раскадрой. У меня есть кнопка в главном меню, и она появляется на другом контроллере представления с помощью этого кода.

VC *secondVC = [[VC alloc] init];
[self presentViewController:secondVC animated:YES completion: nil];

И там у меня есть кнопка с этим кодом

[self dismissViewControllerAnimated:YES completion: nil];

И когда я pop до secondVC xcode дает мне ошибку:

Представление контроллеров представлений на отдельных контроллерах просмотра не рекомендуется <UINavigationController: 0x8c94510>.

У меня также проблемы с вращением, это не работает должным образом.

4b9b3361

Ответ 1

Это предупреждение появится, если вы пытаетесь нажать, представить или просмотреть контроллеры вида в viewWillAppear. Я не знаю, что в вашем коде, поэтому трудно определить вашу проблему, но попробуйте использовать это, если вы пытаетесь показать новые представления в viewWillAppear.

[self performSelector:@selector(yourMethod)
               withObject:nil afterDelay:0.0];

Ответ 2

Я столкнулся с подобной ситуацией, пытаясь представить UIAlertController из viewWillAppear. Поскольку performSelector не существует в Swift, я завернул свой вызов таким образом:

dispatch_async(dispatch_get_main_queue()), {
    presentYourVCHere;
});

Ответ 3

Представьте контроллер вместо viewDidAppear:.

Ответ 4

Попробуйте нажать из rootVC:

[self.view.window.rootViewController.navigationController pushViewController:YOUR_VIEW_CONTROLER animated:YES];

Ответ 5

попробуйте вызвать одно и то же действие в viewDidAppear. это предупреждение связано с тем, что мы представляем любой вид в режиме viewDidLoad или viewWillAppear.

то сделайте это в         override func viewDidAppear (анимированный: Bool) {... }

Ответ 6

Если вам интересно, как вы могли это сделать, используя быстрый (возможно, даже в Objective C), следующий код поможет мне преодолеть вышеупомянутую проблему. Используйте этот код внутри viewDidLoad()

var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), { () -> Void in
         //this place to call segue or manually load the view. 
})

Ответ 7

Я получал ту же ошибку при представлении UIAlertController из UIViewController (vc2), вложенный в другой UIViewController (vc1)

Я решил это так:

[vc1 addChildViewController:vc2]

После этого я могу представить UIAlertController из vc2 без сообщений об ошибках.

Ответ 8

если эта ошибка возникает из контроллера popup view, вам нужно вызвать код для отображения контроллера предупреждений непосредственно из родительского представления с помощью делегирования. Например, в контроллере родительского представления:

-(void) showAlertError: (YourClass *) whateverParameter {
    dispatch_async(dispatch_get_main_queue(), ^{
        UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Your Title"
                                                                       message:@"Your message"
                                                                preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                              handler:^(UIAlertAction * action) {}];
        [alert addAction:defaultAction];
        [self presentViewController:alert animated:YES completion:nil];
    });
}

И в представлении вашего ребенка:

- (IBAction)btnDone:(id)sender{
    [self.delegate showAlertError:self];
}

Ответ 9

Ни один из ответов не помог мне. И вот код, который я использовал для решения проблемы.

let topViewController = (self.navigationController?.viewControllers.last)! as UIViewController
topViewController.presentViewController(secondView, animated: true, completion: nil)

Надеюсь, это поможет кому-то:)

Ответ 10

Пожалуйста, нажмите ссылку ниже по той же проблеме:

fooobar.com/info/263485/...