¿Cómo puedo presentar un controlador de vista modal desde la vista del delegado de la aplicación, la parte superior? Tratando de presentar un controlador de vista modal desde una UIView, lo cual me confundió.presentModalViewController del delegado de la aplicación
Respuesta
Los delegados de la aplicación no administran una vista. Debe presentar un controlador de vista modal desde el método -viewDidAppear:
del primer controlador de vista que se pone en pantalla en -application:didFinishLaunchingWithOptions:
.
Usa tu rootViewController
. Puede presentar un controlador de vista modal desde cualquier subclase de controlador de vista. Si su raíz VC es un UITabBarController, entonces usted puede hacer:
[self.tabBarController presentModalViewControllerAnimated:YES]
o si es un controlador de navegación:
[self.navigationController presentModalViewControllerAnimated:YES]
etc.
EDIT: MVC
Por tratando de presentar un controlador desde dentro de una vista, estás rompiendo el patrón MVC. Generalmente, una vista se refiere a su apariencia y exposición de interfaces para comunicar el estado de la interfaz de usuario a su controlador. Por ejemplo, si tiene un UIButton
en su vista y desea que presente un controlador de vista modal, no debe cablear la vista para hacerlo. En cambio, cuando un controlador crea una instancia de la vista, el controlador configura el botón configurándose como un objetivo para recibir la acción touchUpInside
donde puede presentar el controlador de vista modal apropiado.
La vista en sí no tiene (y no debe) tener este conocimiento contextual para hacer el trabajo de un controlador.
No funciona si el 'rootViewController' ya presenta un controlador de vista modal. – Steve
cierto, esto fue solo un ejemplo. No conozco la lógica completa de la aplicación OP. También acuerde con todo lo que es mejor entender las técnicas adecuadas para poder desviarse con pleno conocimiento de lo que está haciendo cuando sea necesario. – XJones
Un enfoque basado en 'UIWindow' funciona siempre, en general, sin lógica personalizada ... al igual que un' UIAlertView' siempre funciona. – Steve
La mejor manera de hacerlo es crear una nueva UIWindow
, establecer su propiedad windowLevel
, y presentar su UIViewController
en esa ventana.
Así es como UIAlertView
s trabajo.
interfaz
@interface MyAppDelegate : NSObject <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow * alertWindow;
...
- (void)presentCustomAlert;
@end
Implementación:
@implementation MyAppDelegate
@synthesize alertWindow = _alertWindow;
...
- (void)presentCustomAlert
{
if (self.alertWindow == nil)
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];
UIWindow * alertWindow = [[UIWindow alloc] initWithFrame:screenBounds];
alertWindow.windowLevel = UIWindowLevelAlert;
}
SomeViewController * myAlert = [[SomeViewController alloc] init];
alertWindow.rootViewController = myAlert;
[alertWindow makeKeyAndVisible];
}
@end
Funciona como un encanto. –
respuesta magníficamente útil – Fattie
- 1. Delegado de aplicación - Cocoa
- 2. ¿Cómo obtener la vista activa en una aplicación iOS del delegado de la aplicación?
- 3. iPad viewWillAppear y presentModalViewController problems
- 4. ¿PresentModalViewController o addsubview?
- 5. Usando pushViewController después de presentModalViewController
- 6. empujar uiviewcontroller de presentModalViewController
- 7. ¿Controlador de vista del guión actual del delegado de la aplicación?
- 8. Mostrando la animación de pushviewcontroller como presentModalViewController
- 9. llamada presentModalViewController de la clase NSObject
- 10. presentModalViewController no trabajar
- 11. El uso del delegado
- 12. problema con presentModalViewController
- 13. Diferente transición en presentModalViewController: animated:
- 14. Uso de presentModalViewController con guiones gráficos
- 15. IOS - pushViewController vs diferencia presentModalViewController
- 16. Diferencia entre presentModalViewController y presentViewController?
- 17. Llamando al método del controlador de vista desde la aplicación delegado
- 18. PresentModalViewController en Storyboard programáticamente iOS 5
- 19. Optimizador del compilador delegado C#
- 20. presentModalViewController en viewDidLoad en el primer lanzamiento
- 21. Valor de conjunto del delegado de rieles
- 22. iPhone - presentModalViewController través UITabBarItem y dismissModalViewController limpiamente
- 23. Error de CoreData enloqueciéndome ... CoreData: error de aplicación grave. Una excepción capturada del delegado de NSFetchedResultsController
- 24. ¿Qué es Delegado y Métodos de delegado
- 25. ¿Puede presentModalViewController funcionar en el inicio?
- 26. El concepto de propietario del archivo, primero en responder, y delegado aplicación en iPhone
- 27. Delegado: Nombre del método error esperado
- 28. ¿Cómo obtener la ventana principal (delegado de la aplicación) de otra clase (subclase de NSViewController)?
- 29. ¿Cómo acceder a las variables del controlador de vista desde el delegado de la aplicación ... y viceversa?
- 30. NSTextFieldCell Delegado?
De hecho, estoy tratando de presentar un modalViewController de un UIView, y tratando de presentar esto en la parte superior más viewcontroller, alguna idea? – adit
Los controladores de vista modal solo pueden ser presentados por otros controladores de vista. Las vistas que administran no tienen conocimiento de su propio controlador y mucho menos de otros controladores de vista. –
Si bien esta respuesta señala algunos de los malentendidos del OP, en realidad no responde la pregunta. Consulte mi respuesta a: UIWindow – Steve