Представление контроллеров представлений на контроллерах отдельных точек зрения препятствует
Я использую 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>
.
У меня также проблемы с вращением, это не работает должным образом.
Ответы
Ответ 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/...