ios - La presentación de controladores de vista en controladores de vista separada es desalentadora
xcode amslidemenu (10)
En caso de que este error se produzca desde el controlador de vista emergente, debe llamar al código para mostrar el controlador de alerta directamente desde la vista principal mediante delegación. Por ejemplo, en su controlador de vista principal:
-(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];
});
}
Y en su vista infantil:
- (IBAction)btnDone:(id)sender{
[self.delegate showAlertError:self];
}
Estoy usando xcode 5.1.1 con storyboard. Tengo un botón en el menú principal y aparece en otro controlador de vista con este código
VC *secondVC = [[VC alloc] init];
[self presentViewController:secondVC animated:YES completion: nil];
Y ahí tengo el botón Atrás con este código.
[self dismissViewControllerAnimated:YES completion: nil];
Y cuando hago pop a secondVC xcode me da un error:
La presentación de los controladores de vista en los controladores de vista separada es desalentador
<UINavigationController: 0x8c94510>
.
También tengo problemas con la rotación, no funciona correctamente.
Esta advertencia aparecerá si, si está intentando insertar, presentar o abrir una vista de los controladores en viewWillAppear. No sé qué hay en su código, por lo que es difícil identificar su problema, pero intente usarlo si está intentando mostrar nuevas vistas en viewWillAppear.
[self performSelector:@selector(yourMethod)
withObject:nil afterDelay:0.0];
Intente empujar desde rootVC:
[self.view.window.rootViewController.navigationController pushViewController:YOUR_VIEW_CONTROLER animated:YES];
Me encontré con una situación similar al intentar presentar un UIAlertController desde viewWillAppear. Como performSelector no existe en Swift, envolví mi llamada de esta manera:
dispatch_async(dispatch_get_main_queue()), {
presentYourVCHere;
});
Ninguna de las respuestas me ayudó. Y aquí el código que utilicé para resolver el problema.
let topViewController = (self.navigationController?.viewControllers.last)! as UIViewController
topViewController.presentViewController(secondView, animated: true, completion: nil)
Espero que esto ayude a alguien :)
Por favor haga clic en el enlace de abajo para el mismo problema:
https://.com/a/43268601/2226399
Presente el controlador desde viewDidAppear:
lugar.
Recibía el mismo error al presentar un UIAlertController desde un UIViewController (vc2) anidado dentro de otro UIViewController (vc1)
Lo resolví así:
[vc1 addChildViewController:vc2]
Después de hacer eso, pude presentar UIAlertController desde vc2 sin ningún mensaje de error.
Si alguien se pregunta cómo podría hacer esto usando swift (incluso puede usarse en el Objetivo C), el siguiente código me ayuda a superar el problema anterior. Utilice este código dentro de 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.
})
intente llamar a la misma acción en viewDidAppear. Esta advertencia se debe a que cuando presentamos una vista en el método viewDidLoad o viewWillAppear.
así que haz esto en la función de anulación viewDidAppear (animated: Bool) {...}