Вызовите presentModalViewController из класса NSObject - PullRequest
5 голосов
/ 21 сентября 2010

В моем подклассе 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];

Ответы [ 3 ]

7 голосов
/ 14 августа 2012

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

В представлении Controller // ваш текущий вид

[nsobjectclassObject OpenMailComposer:self]; // это переведет контроллер вида в NSobject class

В классе 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]

2 голосов
/ 21 сентября 2010

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

0 голосов
/ 21 сентября 2010

Если вы удерживаете навигационный контроллер или какой-либо viewController, вы можете представить модальный контроллер представления.

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

...