2010-09-21 16 views
5

W moim podklasy NSObject chciałbym nazwać coś takiegopołączeń presentModalViewController od NSObject klasy

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

Ale żaden z moich prób były udane. Jak mogę wywołać widok modalny, jeśli nie jestem w podklasie UIViewController?

Rozwiązanie:

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

Odpowiedz

2

nie widzę sposobu, aby wyświetlić widok modalne bez ViewController. Musisz przechowywać odwołanie do UIViewController w swojej klasie, abyś mógł uzyskać do niego dostęp. Lub ustaw właściwość w AppDelegate, którą możesz uzyskać, dzwoniąc do [delegata [UIApplication sharedApplication]];

+0

Mam właściwość w moim 'AppDelegate' nazwie" navController ". Dlaczego nie mogę uzyskać dostępu do '\t [[[UIApplication sharedApplication] navController] presentModalViewController: myView animowane: YES];' Czy muszę zadeklarować inną właściwość i ustawić tę właściwość na 'self' w' didFinishLaunchingWithOptions: '? – testing

+0

Powinieneś mieć możliwość dostępu do niego bezpośrednio podczas wklejania, czy to działa? – jv42

+0

Nie, dostaję "" UIApplication "może nie odpowiadać na" -navController "". Z 'delegatem' otrzymuję" -navController "nie znaleziono w protokołach" – testing

0

Jeśli posiadasz element navigationController lub jakiś kontroler viewController, możesz przedstawić modalny kontroler widoku.

Jaki jest twój myView? Czy to jest widok, czy jest to viewController. Mam nadzieję, że jest to kontroler viewcontroller, to jest powód, dla którego Twój kod nie działa

+0

'myView' to ViewController. 'MyViewController * myView = [[MyViewController alloc] init];' Ale nie mogę wywołać widoku modalnego z tego samego kontrolera ViewController (próbowałem tego, ale nic się nie dzieje). Nie mogę uzyskać dostępu do kontrolera NavigationController, ponieważ jestem w klasie "NSObject". Otrzymuję komunikat "xxx może nie odpowiadać na xxx". – testing

+0

to ma sens, że nie można uzyskać dostępu do navController.Tak więc dobrym sposobem jest zainicjowanie obiektu, przekazanie go kontrolera widoku: 'MyObject * obj = [[alokacja MyObject] initWithViewController: myViewController];' następnie przechowuj swój myViewController gdzieś – vodkhang

+0

Gdy potrzebujesz przedstawićModalViewController wykonaj: '[myViewController presentModalViewController animowany: TAK]; ' – vodkhang

6

lepszy sposób wywoływania presentModalViewController jest, przechodząc viewcontroller do klasy NSobject. wywołać funkcję nsobject z uiviewcontroller Oto kod z przykładu poczty

Biorąc kontrolera // bieżący widok

[nsobjectclassObject OpenMailComposer:self]; // to zajmie viewcontroller do NSobject klasy

W klasie NSObject// może być dzielenie klasa

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

do oddalenia od NSObject class można wykonać następujące czynności

[viewControllertoShow dismissViewControllerAnimated:YES]

Powiązane problemy