从NSObject类调用presentModalViewController

时间:2010-09-21 12:33:54

标签: iphone objective-c cocoa-touch modalviewcontroller

在我的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 个答案:

答案 0 :(得分:7)

调用presentModalViewController的更好方法是将viewcontroller传递给NSobject类。从nsobject调用uiviewcontroller函数 这是带有邮件示例的代码

在视图控制器中//当前视图

[nsobjectclassObject OpenMailComposer:self]; //这会将viewcontroller带到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]

答案 1 :(得分:2)

我没有看到在没有ViewController的情况下显示模态视图的方法。您必须在类中存储对UIViewController的引用,以便可以访问它。或者在AppDelegate中设置一个属性,您可以通过调用[[UIApplication sharedApplication] delegate]来获取该属性;

答案 2 :(得分:0)

如果你持有navigationController或一些viewController,你可以呈现一个模态视图控制器。

你的myView是什么?它是一个视图,它是一个viewController。我希望它是一个viewcontroller,否则,这就是你的代码无法运行的原因