我发现了一些类似于我的问题,但我仍然没有得到它。
我有第一个继承CCScene的类,比我创建一个对象去UIView类并使用addChild而不是我创建另一个UIView类的对象并使用addSubView。 所以CCScene - > UIView - >的UIView
第一个对象的声明:
startLayer.h:
@interface startLayer : CCScene {
@public
PlayScene *tView;
}
startLayer.m:
tView = [[PlayScene alloc]initWithFrame:CGRectMake(0, 0, 320, 520)];
tView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backGround.jpg"]];
CCUIViewWrapper* wrapper = [CCUIViewWrapper wrapperForUIView:tView];
[self addChild:wrapper];
第二个对象:
PlayScene.h:
@interface PlayScene : UIView {
@public
gameOverMenu* gorm ;
}
PlayScene.m:
gorm = [[gameOverMenu alloc]initWithFrame:CGRectMake(0, 0, 320, 520)];
gorm.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backGround.jpg"]];
[self addSubview:gorm];
所以在gameOverMenu类中我得到了UITextField subView:
UITextField* tf = [[UITextField alloc]initWithFrame:CGRectMake(100, 350, 150, 20)];
[tf setPlaceholder:@"Type your name.."];
[self addSubview:tf];
我想让键盘移动View,我被告知要在我的RootViewController中写这样的东西:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
}
-(void)keyboardDidShow:(NSNotification*)notification {
NSDictionary* userInfo = [notification userInfo];
NSValue* value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [value CGRectValue].size;
// NSLog (@"%@", NSStringFromCGRect(gm.frame));
NSLog(@"%@", gm.superview);
// NSLog(@"%d", [gm.subviews count]);
gm.frame = CGRectMake(gm.frame.origin.x, gm.frame.origin.y, gm.frame.size.width, gm.frame.size.height-keyboardSize.height);
// NSLog (@"%@", NSStringFromCGRect(gm.frame));// NSLog(@"%@", gm.superview);
// NSLog(@"%d", [gm.subviews count]);
}
-(void)keyboarDidHide:(NSNotification*)notification {
NSDictionary* userInfo = [notification userInfo];
NSValue* value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [value CGRectValue].size;
gm.frame = CGRectMake(gm.frame.origin.x, gm.frame.origin.y, gm.frame.size.width, gm.frame.size.height+keyboardSize.height);
}
@class gameOverMenu;
@interface RootViewController : UIViewController {
@public
gameOverMenu* gm;
}
但NSLog显示gm对象没有框架,没有超类,也没有子视图,我想这意味着我应该在这里使用我的表单对象,但我不知道如何从另一个类中获取它。我顺便创建了cocos2d项目,所以我不得不写[self viewDidLoad];在AppDelegate中,我没有在RootViewController中实现其他方法。
答案 0 :(得分:0)
在我看来,在你的RootViewController中,你没有创建gameOverMenu
对象;因为这是RootViewController的ivar,所以nil
中的keyboardDidShow
。
我不确定我理解你要做什么,但请记住,从RootViewController你可以通过调用来访问cocos2d中运行的当前场景:
CCScene* container = [CCDirector sharedDirector].runningScene;
您的图层是场景中唯一的子图层,因此您可以通过执行以下操作来访问它:
[container.children objectAtIndex:0]
您可以在类中创建ivars和访问器(属性),以便一切都更清晰,但我希望这有助于您的代码的快速补丁。