【问题标题】:Present another View Controller from SkScene从 SkScene 展示另一个视图控制器
【发布时间】:2014-05-20 10:09:37
【问题描述】:

我正在尝试从我的“SkScene”中展示另一个viewController。 这是我的主要viewController(tuViewController)

代码:

-(void) openTweetSheet{
    FacebookLikeViewDemoViewController *ctrl = [[FacebookLikeViewDemoViewController alloc] initWithNibName:@"FacebookLikeViewDemoViewController" bundle:nil];

    [self presentViewController:ctrl animated:YES completion:nil];
}

这是我的“SkScene”:

tuViewController *viewController = [[tuViewController alloc]init];
[viewController openTweetSheet];

我要展示的viewControllerFacebookLikeViewDemoViewController,我需要回到“SkScene”。

我得到了sigabrt error,我尝试了几种方法来呈现viewController,但总是失败,有一次我换到viewController,但它完全是黑色的。我读了很多如何执行此操作,但我个人无法弄清楚。感谢您的帮助。

我也尝试过通知中心。

主视图控制器

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(goToGameOverViewController:)
 name:@"GoToGameOverViewController"
 object:nil];

-(void)goToGameOverViewController:(NSNotification *) notification {
    FacebookLikeViewDemoViewController *helpVC = [[FacebookLikeViewDemoViewController alloc]initWithNibName:@"HelpViewController" bundle:nil];
    UIViewController *rootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
    [rootVC presentViewController:helpVC animated:YES completion:nil];
}

SkScene

[[NSNotificationCenter defaultCenter]
 postNotificationName:@"GoToGameOverViewController" object:self];

但我得到了同样的错误。我更喜欢弄清楚为什么通知方式不起作用。

【问题讨论】:

  • 请在继续之前完整阅读 Apple 文档,它可以在这里建立developer.apple.com/library/ios/documentation/uikit/reference/…
  • 我尝试使用stackoverflow.com/questions/21578391/…通知中心解决方案,但我也崩溃了..
  • 引发了什么异常?
  • SIGBART 当我调用 FacebookLikeViewDemoViewController *helpVC = [[FacebookLikeViewDemoViewController alloc]initWithNibName:@"FacebookLikeViewDemoViewController" bundle:nil]; [self presentViewController:helpVC动画:YES完成:nil];它只是崩溃。我试图 FacebookLikeViewDemoViewController *helpVC = [[FacebookLikeViewDemoViewController alloc]init];然后它改变了视图,但它完全是黑屏。

标签: sprite-kit nsnotifications social-framework


【解决方案1】:

根据您的问题,我假设您希望在社交媒体上发帖。

您可以将视图控制器的引用传递给您的 SKScene,也可以改用 NSNotificationCenter。我更喜欢使用后者。

首先确保您已将 Social.framework 添加到您的项目中。

将社交框架导入您的视图控制器#import <Social/Social.h>

然后在 View Controller 的 viewDidLoad 方法中添加以下代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(createTweet:)
                                             name:@"CreateTweet"
                                           object:nil];

接下来将此方法添加到您的视图控制器:

-(void)createTweet:(NSNotification *)notification
{
    NSDictionary *tweetData = [notification userInfo];
    NSString *tweetText = (NSString *)[tweetData objectForKey:@"tweetText"];
    NSLog(@"%@",tweetText);

    // build your tweet, facebook, etc...
    SLComposeViewController *mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    [self presentViewController:mySLComposerSheet animated:YES completion:nil];
}

在您的 SKScene 中的适当位置(赢得比赛、输掉比赛等)添加以下代码:

NSString *tweetText = @"I just beat the last level.";
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:tweetText forKey:@"tweetText"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"CreateTweet" object:self userInfo:userInfo];

上面的代码发送一个带有文本的 NSNotification,你的 View Controller 将获取它并执行指定的方法(在上面的例子中是 createTweet)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多