2010-09-21 12 views
5

Nel mio sottoclasse di NSObject vorrei chiamare qualcosa comechiamata presentModalViewController da NSObject classe

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

Ma nessuno dei miei tentativi hanno avuto successo. Come posso chiamare una vista modale se non sono in una sottoclasse di UIViewController?

Soluzione:

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

risposta

2

Non vedo un modo per visualizzare una vista modale senza ViewController. Devi memorizzare un riferimento a un UIViewController nella tua classe in modo da poterlo accedere. Oppure imposta una proprietà nel tuo AppDelegate, che puoi ottenere chiamando [delegato [applicazione UIApplication sharedApplication]];

+0

Ho un immobile nel mio 'AppDelegate' chiamato "navController". Perché non riesco ad accedere a '\t \t [[[UIApplication sharedApplication] navController] presentModalViewController: myView animato: YES];' Devo dichiarare un'altra proprietà e impostare questa proprietà su 'self' in' didFinishLaunchingWithOptions: '? – testing

+0

Dovresti poter accedere direttamente mentre hai incollato, funziona? – jv42

+0

No, ho capito che "UIApplication" potrebbe non rispondere a "-navController" ". Con 'delegato' si ottiene" '-navController' non trovato nei protocolli " – testing

0

Se si tiene il navigationController o qualche viewController, è possibile presentare un controller di visualizzazione modale.

Qual è il tuo myView? È una visione, è una vista di controllo. Spero che sia un viewcontroller in caso contrario, questo è il motivo per cui il tuo codice non viene eseguito

+0

'myView' è un ViewController. 'MyViewController * myView = [[MyViewController alloc] init];' Ma non posso chiamare la vista modale dallo stesso ViewController (l'ho provato, ma non succede niente). Non riesco ad accedere al NavigationController perché sono in una classe 'NSObject'. Ricevo l'avviso "xxx potrebbe non rispondere a xxx". – testing

+0

quindi, ha senso che non è possibile accedere a navController.Quindi, il modo migliore è quando si avvia l'oggetto, passandolo a una vista Controller: 'MyObject * obj = [[MyObject alloc] initWithViewController: myViewController];' quindi memorizza myViewController da qualche parte – vodkhang

+0

Quando è necessario presentareModalViewController fare: '[myViewController presentModalViewController animato: YES]; ' – vodkhang

6

il modo migliore per chiamare un presentModalViewController è, passando viewcontroller alla classe NSobject. chiamare la funzione nsobject dal uiviewcontroller Ecco il codice con la posta esempio

In considerazione controller // visualizzazione corrente

[nsobjectclassObject OpenMailComposer:self]; // questo richiederà la viewcontroller per NSobject classe

In classe NSObject// può essere condivisione di classi

-(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]; 
} 

per respingere da NSObject class è possibile effettuare le seguenti operazioni

[viewControllertoShow dismissViewControllerAnimated:YES]