2010-09-21 2 views
5

В моем подклассу NSObject я хотел бы назвать что-то вродеВызов presentModalViewController из NSObject класса

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

Но ни одна из моих попыток не увенчалась успехом. Как я могу назвать модальное представление, если я не в подклассе UIViewController?

Решение:

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

ответ

2

Я не вижу способ отображения модального вид без ViewController. Вы должны сохранить ссылку на UIViewController в своем классе, чтобы вы могли получить к ней доступ. Или настройте свойство в AppDelegate, которое вы можете получить, вызвав делегат [[UIApplication sharedApplication]];

+0

У меня есть свойство в мой 'AppDelegate' называется "NavController". Почему я не могу получить доступ к '\t \t [[[UIApplication sharedApplication] navController] presentModalViewController: myView animated: YES];' Должен ли я объявить другое свойство и установить это свойство 'self' в' doneFinishLaunchingWithOptions: '? – testing

+0

У вас должен быть доступ к нему напрямую при вставке, он работает? – jv42

+0

Нет, я получаю «UIApplication», возможно, не отвечает на «-navController». С 'delegate' я получаю '' -navController ', не найденный в протоколах' – testing

0

Если вы удерживаете navigationController или какой-либо viewController, вы можете представить modal view controller.

Ваше имя: myView? Это вид, это viewController. Я надеюсь, что это будет viewcontroller иначе, это причина, по которой ваш код не запускается.

+0

'myView' - это ViewController. 'MyViewController * myView = [[MyViewController alloc] init];' Но я не могу вызывать модальный вид из того же ViewController (пытался, но ничего не происходит). Я не могу получить доступ к NavigationController, потому что я в классе NSObject. Я получаю предупреждение «xxx не отвечает на xxx». – testing

+0

, тогда имеет смысл, что вы не можете получить доступ к navController.Итак, хороший способ - это когда вы начинаете свой объект, передаете ему представление. Контроллер: «MyObject» obj = [[MyObject alloc] initWithViewController: myViewController]; 'затем сохраните ваш myViewController где-то – vodkhang

+0

Когда вам нужно представитьModalViewController, выполните:' [myViewController presentModalViewController animated: YES]; ' – vodkhang

6

Лучший способ вызвать presentModalViewController - передать viewcontroller классу NSobject. вызовите nsobject функции из uiviewcontroller Вот код с почтой, например

В видовом контроллере // текущего вида

[nsobjectclassObject OpenMailComposer:self]; // это возьмет ViewController к NSobject классу

В классе NSObject// может быть совместное использование класса

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

Для отклоняя от NSObject class вы можете сделать следующее

[viewControllertoShow dismissViewControllerAnimated:YES]