如何从基于OpenGLES的应用程序调用presentViewController?

时间:2013-04-13 12:25:21

标签: ios objective-c uiview uinavigationcontroller

我正在使用GLSprite基本代码。我有一个EAGLAppDelegate和一个EAGLView。我尝试将一个navController变量添加到委托:

// AppDelegate.h
@property (nonatomic, strong) UINavigationController *navController;
// AppDelegate.m
@synthesize navController = _navController;

然后在touchesBegan(用于测试)中执行以下操作,但navController为NULL并且没有出现任何内容?我该如何解决这个问题?

GLSpriteAppDelegate *ad = (GLSpriteAppDelegate *)[[UIApplication sharedApplication] delegate];

SLComposeViewController *fbController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){
    [fbController dismissViewControllerAnimated:YES completion:nil];
    switch(result){
        case SLComposeViewControllerResultCancelled:
        default:
            NSLog(@"Cancelled.....");
            break;
        case SLComposeViewControllerResultDone:
            NSLog(@"Posted....");
            break;
    }};
//[fbController addImage:[UIImage imageNamed:@"1.jpg"]];
[fbController setInitialText:@"Test message"];
[fbController addURL:[NSURL URLWithString:@"http://www.test.com"]];
[fbController setCompletionHandler:completionHandler];
[ad.navController presentViewController:fbController animated:YES completion:nil];

1 个答案:

答案 0 :(得分:0)

添加变量是不够的,你必须把东西放进去......

您的导航控制器(navController)为nil,因为您没有为其指定任何内容。另请注意,如果您想要显示控制器,导航控制器必须在屏幕上。

通常,您应该从当前控制器提供控制器。如果正确构建类,则需要在控制器类中显示控制器的代码。但是,您始终可以通过

访问窗口根控制器
[ad.window.rootViewController presentViewController:...]