2009-03-28 7 views
12

誰でもcocos2dでUITextFieldを使用するためのリンクを提案してください。 ラベルを押したければ、UITextFieldが選択され、その上で編集する必要がありますUITextFieldUITextFieldの例(Cocos2d)

答えて

15

私は現在のプロジェクトでこれをやっていますので、再生するレベルの番号を入力することができます。そのため、変数とメソッドの名前はそのままです。おそらくあなたのためにこれらを調整する必要があります。アプリのコントローラで

、インスタンス変数としてこれを定義します。

UITextField *levelEntryTextField; 

applicationDidFinishLaunching内にそれを作成します。

levelEntryTextField = [[UITextField alloc] initWithFrame: 
               CGRectMake(60, 165, 200, 90)]; 
    [levelEntryTextField setDelegate:self]; 

は、テキストフィールドをアクティブにする方法を定義します。また、あなたのアプリケーションコントローラのヘッダーファイルに宣言する必要があります。

​​

これは編集が実際に行われたときにこれがトリガーされ

- (BOOL)textFieldShouldReturn:(UITextField*)textField { 
    //Terminate editing 
    [textField resignFirstResponder]; 
    return YES; 
} 

を編集キーパッドの端に「復帰」を押すようになります。

- (void)textFieldDidEndEditing:(UITextField*)textField { 
    if (textField==levelEntryTextField) { 
     [levelEntryTextField endEditing:YES]; 
     [levelEntryTextField removeFromSuperview]; 
     // here is where you should do something with the data they entered 
     NSString *result = levelEntryTextField.text; 
    } 
} 

実際に動きを実際に設定するには、これをどこかに配置します。

[[[UIApplication sharedApplication] delegate] specifyStartLevel]; 
+0

私はこの方法を試してみたが、唯一のキーボードが現れています。テキストフィールドが表示されませんでした – OMGPOP

+1

[textBox setTextColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]]; [テキストボックスsetBackgroundColor:[UIColor colorWithRed:255緑:255青:255アルファ:1.0]]; – RSH1

+0

'' SpecifyStartLevel'の 'window'は何ですか?本当の初心者であればOKです。[[[CCDirector sharedDirector]ビュー]ウィンドウ] ''です。 – Claudiu

10

私はこれはCocos2D 0.7.1 XCodeのテンプレートを使用して行われた、ジャックが提供され、実際の作業プロジェクトを作成した例を取った:私は、ユーザーの操作に応答して、私のシーンクラスの1つの中からこれを呼び出します下に提供されている* AppDelegate.m/.hファイルを編集するだけです。 appDidFinishLoadingでUITextFieldを作成すると、特にテキストフィールドが常に使用されていない場合は、メモリが多すぎると感じるため、Jackが言ったことのいくつかを修正しました。このソリューションでは、サンプルが空のCocos2D Layerシーンを描画し、スクリーンタッチでは、テキストの入力を開始するためのテキストフィールドが表示されます。これは、コンソールに入力した結果を吐き出します。これを自分のコードで必要なものに渡すことができます。

の.h

#import <UIKit/UIKit.h> 
#import "cocos2d.h" 
@interface MYSCENE : Layer <UITextFieldDelegate> 
{ 
    UITextField *myText; 
} 
-(void)specificStartLevel; 
@end 
@interface textFieldTestAppDelegate : NSObject <UIAccelerometerDelegate, UIAlertViewDelegate, UITextFieldDelegate, UIApplicationDelegate> 
{ 
    UIWindow *window; 
} 
@end 

、その後の.m

#import "textFieldTestAppDelegate.h" 
@implementation MYSCENE 
-(id) init 
{ 
    self = [super init]; 
    isTouchEnabled = YES; 
    return self; 
} 
-(BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self specifyStartLevel]; 
    return kEventHandled; 
} 
-(void)specifyStartLevel { 
    myText = [[UITextField alloc] initWithFrame:CGRectMake(60, 165, 200, 90)]; 
    [myText setDelegate:self]; 
    [myText setText:@""]; 
    [myText setTextColor: [UIColor colorWithRed:255 green:255 blue:255 alpha:1.0]]; 
    [[[[Director sharedDirector] openGLView] window] addSubview:myText]; 
    [myText becomeFirstResponder]; 
} 
-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [myText resignFirstResponder]; 
    return YES; 
} 
-(void)textFieldDidEndEditing: (UITextField *)textField { 
    if(textField == myText) { 
     [myText endEditing:YES]; 
     [myText removeFromSuperview]; 
     NSString *result = myText.text; 
     NSLog([NSString stringWithFormat:@"entered: %@", result]); 
    } else { 
     NSLog(@"textField did not match myText"); 
    } 
} 
-(void) dealloc 
{ 
[super dealloc]; 
} 
@end 
@implementation textFieldTestAppDelegate 
- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [window setUserInteractionEnabled:YES]; 
    [[Director sharedDirector] setDisplayFPS:YES]; 
    [[Director sharedDirector] attachInWindow:window]; 
    Scene *scene = [Scene node]; 
    [scene addChild: [MYSCENE node]]; 
    [window makeKeyAndVisible]; 
    [[Director sharedDirector] runWithScene: scene]; 
} 
-(void)dealloc 
{ 
    [super dealloc]; 
} 
-(void) applicationWillResignActive:(UIApplication *)application 
{ 
    [[Director sharedDirector] pause]; 
} 
-(void) applicationDidBecomeActive:(UIApplication *)application 
{ 
    [[Director sharedDirector] resume]; 
} 
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{ 
    [[TextureMgr sharedTextureMgr] removeAllTextures]; 
} 
@end 
+0

ありがとう。 nice done – OMGPOP

+0

[[[CCDirector sharedDirector] openGLView]ウィンドウ] [addSubview:myText];そうする必要があります。 [[[Director sharedDirector] openGLView]ウィンドウの代わりに] addSubview:myText]; –

0

はcocos2dのテキストフィールドを使用するには、以下のCCNodeサブクラス、CCMenuItemTextFieldを試してみてください。

このクラスは、CCMenuItemSpriteから直接サブクラス化されています。タップすると、「選択された」メソッドが呼び出され、UITextFieldがメインウィンドウに追加されます。編集が終了すると、「選択されていない」メソッドが呼び出され、UITextFieldが画面から削除されます。ユーザーの入力はCCLabelTTFノードに保存され、元のUITextFieldと同じ位置に配置されます。

CCMenuItemTextField.h

@interface CCMenuItemTextField : CCMenuItemSprite<UITextFieldDelegate> { 
    UITextField  *textField_; 
    CCLabelTTF  *label_; 

    CGFloat   paddingLeft_; 
} 

@property (readonly, nonatomic) UITextField  *textField; 
@property (readonly, nonatomic) CCLabelTTF  *label; 
@property (assign, nonatomic) CGFloat   paddingLeft; 

- (void)selected; 
- (void)unselected; 
- (void)setFontSize:(CGFloat)size; 

- (NSString*)text; 
- (void)setText:(NSString*)text; 

@end 

CCMenuItemTextField。コード

あなたがシーンにビューを追加し、afetrテキストフィールドを追加し、すべての最初の、次のようにcocos2dでテキストフィールドを追加するにはメートル

#import "CCMenuItemTextField.h" 

@implementation CCMenuItemTextField 

@synthesize 
textField = textField_, 
label = label_, 
paddingLeft = paddingLeft_; 

- (id)init 
{ 
    CCSprite *normalSprite = [CCSprite spriteWithFile:@"text_field_background.png"]; 
    CCSprite *selectedSprite = [CCSprite spriteWithFile:@"text_field_background.png"]; 
    CCSprite *disabledSprite = [CCSprite spriteWithFile:@"text_field_background.png"]; 

    return [self initWithNormalSprite:normalSprite selectedSprite:selectedSprite disabledSprite:disabledSprite]; 
} 

- (id)initWithNormalSprite:(CCNode<CCRGBAProtocol> *)normalSprite 
      selectedSprite:(CCNode<CCRGBAProtocol> *)selectedSprite 
      disabledSprite:(CCNode<CCRGBAProtocol> *)disabledSprite 
{ 
    self = [super initWithNormalSprite:normalSprite 
         selectedSprite:selectedSprite 
         disabledSprite:disabledSprite 
           target:self 
           selector:@selector(selected)]; 

    if (self) { 
     paddingLeft_ = 3.0; 

     textField_ = [[UITextField alloc] init]; 
     [textField_ setTextColor:[UIColor blackColor]]; 
     [textField_ setFont:[UIFont systemFontOfSize:18]]; 

     label_ = [[CCLabelTTF node] retain]; 
     [label_ setAnchorPoint:ccp(0,0.5)]; 
     [label_ setFontSize:18]; 
     [label_ setVisible:NO]; 
     [label_ setColor:ccBLACK]; 
     [self addChild:label_]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [label_ release]; 
    [textField_ release]; 
    [super dealloc]; 
} 

// -------------------------------- 
// Public 
// -------------------------------- 

- (void)selected 
{ 
    [super selected]; 

    [label_ setVisible:NO]; 

    CGAffineTransform transform = [self nodeToWorldTransform]; 
    float textFieldHeight = textField_.font.lineHeight; 
    float width = self.contentSize.width; 
    float height = self.contentSize.height; 
    float left = transform.tx + paddingLeft_; 
    float top = 480 - transform.ty - height + (height - textFieldHeight)/2; 

    [textField_ setFrame:CGRectMake(left, top, width, height)]; 
    [[[[CCDirector sharedDirector] view] window] addSubview:textField_]; 
    [textField_ becomeFirstResponder]; 
    [textField_ setDelegate:self]; 
} 

- (void)unselected 
{ 
    [super unselected]; 

    [label_ setVisible:YES]; 
    [label_ setPosition:ccp(paddingLeft_, self.contentSize.height/2)]; 

    NSString *text = textField_.text ? textField_.text : @""; 
    [label_ setString:text]; 

    [textField_ resignFirstResponder]; 
    [textField_ removeFromSuperview]; 
} 

- (NSString*)text 
{ 
    return [label_ string]; 
} 

- (void)setText:(NSString*)text 
{ 
    [label_ setString:text]; 
    [textField_ setText:text]; 
} 

// -------------------------------- 
// UITextFieldDelegate 
// -------------------------------- 

- (BOOL)textFieldShouldReturn:(UITextField*)textField { 
    [self unselected]; 
    return YES; 
} 

- (void)textFieldDidEndEditing:(UITextField*)textField { 
    [self unselected]; 
} 

- (void)setFontSize:(CGFloat)size 
{ 
    [label_ setFontSize:size]; 
    [textField_ setFont:[UIFont systemFontOfSize:size]]; 
} 

// -------------------------------- 
// CCNode 
// -------------------------------- 

- (void)onExitTransitionDidStart 
{ 
    [super onExitTransitionDidStart]; 
    [self unselected]; 
} 

@end 
+1

どのようなCocos2dバージョンを使用しましたか? v1.1では直接動作しないようです。 –

2

は非常に簡単にthatsのビューに追加します。あなたもcocos2d最良の例ではCCTextfieldを使用することができます

-(id) init 
{ 
    if((self=[super init])) 
    { 

     // add view in scene 

     UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)]; 
     view.backgroundColor = [UIColor redColor]; 

    // add textfield in view 

     UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 140, 300, 30)]; 
     textField.borderStyle = UITextBorderStyleRoundedRect; 
     textField.font = [UIFont systemFontOfSize:15]; 
     textField.placeholder = @"enter text"; 
     textField.autocorrectionType = UITextAutocorrectionTypeNo; 
     textField.keyboardType = UIKeyboardTypeDefault; 
     textField.returnKeyType = UIReturnKeyDone; 
     textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
     textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
     textField.delegate = self; 
     [view addSubview:textField]; 

    // add view in scene 

     [[[CCDirector sharedDirector] view] addSubview:view]; 
} 
    return self; 
} 

ねえ、https://github.com/iNinja/CCTextField