Вызовите presentModalViewController из класса NSObject

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

Решение Вопроса

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

 jv4221 сент. 2010 г., 15:26
Вы должны быть в состоянии получить к нему доступ непосредственно, как вы вставили, это работает?
 jv4221 сент. 2010 г., 15:48
Вы должны привести своего делегата приложения к реальному делегату.
 jv4221 сент. 2010 г., 16:32
Это нормально, быть нубом, пока ты учишься ;-) Рад быть там полезным.
 testing21 сент. 2010 г., 15:42
Нет, я получаю «UIApplication» может не отвечать на «-navController». Сdelegate Я получаю "-navController" не найден в протоколе (ах) "
 testing21 сент. 2010 г., 16:21
Я такой нуб. ОК, «AppDelegate» - это AppDelegate в моем проекте. Это называется что-то вроде «myProjectNameAppDelegate». Я выкладываю решение в моем вопросе.
 testing21 сент. 2010 г., 14:48
У меня есть собственность в моемAppDelegate называется "navController". Почему я не могу получить доступ к `[[[UIApplication sharedApplication] navController] presentModalViewController: myView animated: YES];` Должен ли я объявить другое свойство и установить для этого свойства значениеself вdidFinishLaunchingWithOptions:?
 testing21 сент. 2010 г., 16:00
Как это работает? Я знаю что-то вродеAppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; но что такое "AppDelegate"? Тогда я мог бы сделать[[appDelegate navController] presentModalViewController:myView animated:YES];?

вы можете представить модальный контроллер представления.

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

 vodkhang21 сент. 2010 г., 15:46
Когда вам нужно представить ModalViewController, сделайте:[myViewController presentModalViewController animated:YES];
 testing21 сент. 2010 г., 15:23
myView является ViewControllerMyViewController *myView = [[MyViewController alloc] init]; Но я не могу вызвать модальное представление из того же ViewController (пробовал, но ничего не происходит). Я не могу получить доступ к NavigationController, потому что я в классе NSObject. Я получаю предупреждение «ххх может не отвечать на ххх».
 vodkhang21 сент. 2010 г., 18:23
хорошо, пожалуйста. Вы также можете проголосовать, если считаете, что это помогает :)
 testing21 сент. 2010 г., 16:29
Я пытался найти решение для получения справки ViewController. Но я думал только о получении собственности, которая будет включать в себя новую реализацию. Ваше решение будет работать. Спасибо за это! Я отметил jv42 как решение, потому что мне не нужно менять дваNSObject классы (добавить два метода init и изменить вызовы).
 vodkhang21 сент. 2010 г., 15:46
тогда имеет смысл, что вы не можете получить доступ к navController. Итак, хороший способ - когда вы инициализируете свой объект, передайте его в Controller вида:MyObject *obj = [[MyObject alloc] initWithViewController:myViewController]; затем сохраните свой myViewController где-нибудь

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]

Ваш ответ на вопрос