从viewcontroller设置SKScene委托,找不到代理 [英] setting SKScene delegate from viewcontroller, delegate not found

查看:227
本文介绍了从viewcontroller设置SKScene委托,找不到代理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图从SKScene打开一个视图控制器。

Trying to open a view controller from an SKScene.

找到 http://stackoverflow.com/a/20072795/1686319 非常有帮助,但是当尝试从视图控制器设置委托时,我收到错误。

Found http://stackoverflow.com/a/20072795/1686319 very helpful, but i get an error when trying to set the delegate from the view controller.


SKScene的可见@interface声明选择器
'setDelegate:'

No visible @interface for 'SKScene' declares the selector 'setDelegate:'



EABMyScene.h

#import <SpriteKit/SpriteKit.h>

@protocol EABMySceneDelegate <NSObject>
-(void)doSomething;
@end

@interface EABMyScene : SKScene {

}
@property (nonatomic, weak) id <EABMySceneDelegate> delegate;
@end

任何想法?

更新:

EABViewController.h

EABViewController.h

#import <UIKit/UIKit.h>
#import <SpriteKit/SpriteKit.h>

@protocol ViewControllerDelegate <NSObject>
-(void) openTweetSheet;
@end

@interface EABViewController : UIViewController <ViewControllerDelegate>

@end

EABViewController.m

EABViewController.m

#import "EABViewController.h"
#import "EABMyScene.h"

@implementation EABViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    SKScene * scene = [EABMyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    [scene setDelegate:self];

    // Present the scene.
    [skView presentScene:scene];
}

-(void)openTweetSheet
{
    NSLog(@"Open Tweet Delegate Method");
}

EABMyScene.h

EABMyScene.h

#import <SpriteKit/SpriteKit.h>

@interface EABMyScene : SKScene {

}

@property (nonatomic, weak) id <ViewControllerDelegate> delegate;

@end

错误:SKScene声明中没有可见的@interface选择器'setDelegate:'

Error: No visible @interface for 'SKScene' declares the selector 'setDelegate:'

推荐答案

类SKScene没有一个名为delegate的属性,所以语句

Class SKScene does not have a property named delegate, so the statement

[scene setDelegate:self];

产生编译器错误。要解决此问题,请将场景转换为SKScene子类EABMyScene:

produced the compiler error. To fix this issue, cast scene to your SKScene subclass EABMyScene:

[(EABMyScene *)scene setDelegate:self];

这篇关于从viewcontroller设置SKScene委托,找不到代理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆