2010-09-21 12 views
5

En mi subclase de NSObject quisiera llamar algo así comollamada presentModalViewController de la clase NSObject

[[self navController] presentModalViewController:myView animated:YES]; 

Pero ninguno de mis intentos tuvieron éxito. ¿Cómo puedo llamar a una vista modal si no estoy en una subclase de UIViewController?

Solución:

#import "myProjectNameAppDelegate.h" 
// ... 
MyViewController *myView = [[MyViewController alloc] init]; 
myProjectNameAppDelegate *appDelegate = (myProjectNameAppDelegate *)[[UIApplication sharedApplication] delegate]; 
[[appDelegate navController] presentModalViewController:myView animated:YES]; 

Respuesta

2

no veo una manera de mostrar una vista modal sin ViewController. Tienes que almacenar una referencia a un UIViewController en tu clase para que puedas acceder a él. O configure una propiedad en su AppDelegate, que puede obtener llamando al delegado [[UIApplication sharedApplication]];

+0

que tienen una propiedad en mi 'AppDelegate' llamado "NavController". ¿Por qué no puedo acceder a '\t \t [[[UIApplication sharedApplication] navController] presentModalViewController: myView animated: YES];' ¿Tengo que declarar otra propiedad y establecer esta propiedad en 'self' en' didFinishLaunchingWithOptions: '? – testing

+0

Debería poder acceder directamente al pegar, ¿funciona? – jv42

+0

No, obtengo que '' UIApplication 'no responda a' -navController '". Con 'delegate' I get" '-navController' no encontrado en el (los) protocolo (s) " – testing

0

Si sostiene el navigationController o algún viewController, puede presentar un controlador de vista modal.

Cuál es su myView? ¿Es una vista, es un controlador de vista? Espero que es un controlador de vista de lo contrario, esta es la razón por la que su código no se ejecuta

+0

'myView' es un ViewController. 'MyViewController * myView = [[MyViewController alloc] init];' Pero no puedo llamar a la vista modal desde el mismo ViewController (lo intenté, pero no pasó nada). No puedo acceder al NavigationController porque estoy en una clase 'NSObject'. Recibo la advertencia "xxx no puede responder a xxx". – testing

+0

, tiene sentido que no pueda acceder a navController.Entonces, la mejor manera es cuando inicie su objeto, páselo a la vista Controlador: 'MyObject * obj = [[MyObject alloc] initWithViewController: myViewController];' luego guarde myViewController en algún lugar – vodkhang

+0

Cuando necesite presentarModalViewController do: '[myViewController presentModalViewController animado: SÍ]; ' – vodkhang

6

mejor manera de llamar a un presentModalViewController es, pasando viewcontroller a la clase NSobject. llamar a la función de la nsobjectuiviewcontroller Este es el código con el ejemplo de correo

En vista del controlador de la vista actual //

[nsobjectclassObject OpenMailComposer:self]; // esto llevará a la viewcontroller NSobject clase

En la clase NSObject// clase puede ser compartir

-(void)OpenMailComposer:(UIViewController*)view 
{ 

    viewControllertoShow = view; // viewControllertoShow is UIVIewcontroller object 
    MFMailComposeViewController *mailView = [[MFMailComposeViewController alloc]init]; 
    mailView.mailComposeDelegate = self; 
    [mailView setSubject:@"Hey! check this out!"]; 
    [viewControllertoShow presentModalViewController:mailView animated:YES]; 
} 

Para despedir de NSObject class se puede hacer lo siguiente

[viewControllertoShow dismissViewControllerAnimated:YES]

Cuestiones relacionadas