cocos2D UITextFieldの文字の取得について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kira
記事: 26
登録日時: 14年前

cocos2D UITextFieldの文字の取得について

#1

投稿記事 by kira » 12年前

こんにちは

いつも楽しく拝見させて頂いております。

私は現在cocos2Dでゲームを制作しているのですがレイヤーにUITextFieldを貼付け、そこに入力された文字列を

同じレイヤーに貼付けたラベルに表示させるという作業をしておりますが、どうもテキストフィールドに入力された文字の取得に

失敗しているらしくラベルには(null)が表示されます。


UITextFieldはCCUIViewWrapperを使っています

ラベルはCCLabelTTFです



ご教授お願いいたします。


h

コード:

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "CCUIViewWrapper.h"


@interface charaMaking : CCLayer <UITextFieldDelegate>
{
    UITextField *namefield;
    CCUIViewWrapper *textFieldWrapper;    
   
    NSString *namae_kakutei;
  
}



@property (nonatomic ,copy)NSString *charaname;
@property (nonatomic ,retain)CCLabelTTF *label;

@end

m

コード:

#import "charaMaking.h"


@implementation charaMaking


@synthesize charaname;
@synthesize label;

-(id)scene {
    
       
    CCScene *scene = [CCScene node];
    
	
    CCLayer *backgroundlayer = [CCLayer node];        
    
    [scene addChild:backgroundlayer];
    
    
    return scene;

}

-(void)addTextfield
{
    namefield = [[[UITextField alloc] init] autorelease];
    namefield.frame = CGRectMake(175, 120, 110, 25);
    namefield.borderStyle = UITextBorderStyleRoundedRect;
    namefield.placeholder = @"6文字以内!";
    namefield.returnKeyType = UIReturnKeyDone;
    namefield.clearButtonMode = UITextFieldViewModeWhileEditing;  
    namefield.autocapitalizationType = UITextAutocapitalizationTypeNone;
    namefield.enablesReturnKeyAutomatically = YES;
    namefield.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    namefield.textAlignment = NSTextAlignmentCenter;
    textFieldWrapper = [CCUIViewWrapper wrapperForUIView:namefield];
    
    namefield.delegate = self;
   
    [self addChild:textFieldWrapper];
}



-(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)inputText  //文字数6文字制限
{
    BOOL result;
    NSUInteger maxLength = 6;
    if([inputText compare:@"\n"]==0) {
        result=YES;
        
    }
    else {
        NSUInteger textLength = namefield.text.length;
        NSUInteger rangeLength = range.length;
        NSUInteger stringLength = inputText.length;
        NSUInteger length = textLength - rangeLength + stringLength;
        result = (length <= maxLength);
       
    }
    return result;

    


}

-(BOOL)textFieldShouldReturn:(UITextField*)textField {                    //Doneでキーボードを閉じる
    
    [textField resignFirstResponder];
  
    return YES;                                       
}

-(void)textFieldDidEndEditing:(UITextField *)textField {                   //namae_kakuteiにテキストフィールドの文字列を代入
    
    namae_kakutei = namefield.text;
 
}


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

     
        [self addTextfield];                //UITextField
      
        
        charaname = [NSString stringWithFormat:@"%@",namae_kakutei];
        self.label = [CCLabelTTF labelWithString:charaname fontName:@"Times New Roman" fontSize:20];
        self.label.position = CGPointMake(100, 100);
        self.label.color = ccc3(0,0,0);
        [self addChild:self.label z:1];
    
    
    
    }
    return self;
}

-(void) onExit {
    
    [super onExit];
}

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

- (void)onEnd:(ccTime)dt
{
    [[CCDirector sharedDirector] replaceScene:[Title node]];
    
}

@end

kira
記事: 26
登録日時: 14年前

Re: cocos2D UITextFieldの文字の取得について

#2

投稿記事 by kira » 12年前

UITextFieldとCCLabelの組み合わせがまずいのかと思い

UITextFieldとUILabelでCCUIviewWrapperを使い試してみましたが

やはり表示は(null)でした。

m

コード:


-(void)addnamae {
    
    namae = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 30)];
    textFieldWrapper = [CCUIViewWrapper wrapperForUIView:namae];
    namae.text = [NSString stringWithFormat:@"%@",[namefield text]];;
    [self addChild:textFieldWrapper];

}


しひ

Re: cocos2D UITextFieldの文字の取得について

#3

投稿記事 by しひ » 12年前

こんばんは。
文字を取得するとき、namefieldにインスタンスがあるかどうかは確認してみましたか?

kira
記事: 26
登録日時: 14年前

Re: cocos2D UITextFieldの文字の取得について

#4

投稿記事 by kira » 12年前

こんばんわ

アドバイスありがとうございます

UITextField及びCCLabelが文字列をちゃんと取得しているかを

試しました。



UITextFieldに文字入力の際、リターンキーが押された時のメッソド

コード:


-(BOOL)textFieldShouldReturn:(UITextField*)textField {
    
    namae_kakutei = [NSString stringWithFormat:@"%@",[namefield text]];
   
     NSLog(@"%@",namae_kakutei);                                                     //namefieldに入力された文字列がリターンキーを押すと表示
   
    [textField resignFirstResponder];
    
    return YES;
}


UILabelのメソッド

コード:


        charaname = [NSString stringWithFormat:@"%@",namae_kakutei];
       
        NSLog(@"%@",charaname);                                          //UITextFieldのnamefieldから渡された文字列
        
        label = [CCLabelTTF labelWithString:charaname fontName:@"Times New Roman" fontSize:20];
        label.position = CGPointMake(100, 100);
        label.color = ccc3(0,0,0);
        [self addChild:label z:1];


上記二つを試したところ

textfieldの方では異常なく入力した文字列がLogに表示されましたが

CCLabelの方ではLogに表示されませんでした。

ということはtextfieldから渡されたnamae_kakuteiを格納するcharanameがおかしい

若しくはCCLabelのメソッドに間違いがある、ということですか?

しひ

Re: cocos2D UITextFieldの文字の取得について

#5

投稿記事 by しひ » 12年前

よく読んだら、ラベルに文字を反映させる処理が- initメソッドにしかありませんね。
- textFieldDidEndEditing:メソッド内には、必要ないのでしょうか。

以下は問題解決と関係ありませんが、
・不要な改行が多く、非常に読みづらいです。
・変数名の命名規則を統一してください(namae_kakuteiは日本語+スネークケースなのにnamefieldは英語+非スネークケース)。
・変数namae_kakuteiと変数charanameの役割が被っている気がしますが、どういう使い分けをしているのでしょう。

kira
記事: 26
登録日時: 14年前

Re: cocos2D UITextFieldの文字の取得について

#6

投稿記事 by kira » 12年前

・不要な改行が多く、非常に読みづらいです。
・変数名の命名規則を統一してください(namae_kakuteiは日本語+スネークケースなのにnamefieldは英語+非スネークケース)

ご指摘ありがとうございます。事後参考にさせて頂きます

・変数namae_kakuteiと変数charanameの役割が被っている気がしますが、どういう使い分けをしているのでしょう

本来使用している変数はcharaname(CCLabel)でnamae_kakuteiは試験的にUILabel用で間に合わせに作りました。
いろいろと検証しているうちに本来の目的から外れ、アップしたソースの様に非常に見辛いものとなってしまいました

そしてさらにいじっているうちにtextfiledの文字列をlabelに表示することができました。

textfieldに文字入力時、リターンキーを押した時に動くメソッド内に、CCLabelのメソッドをまるごと持ってきたら
なぜかクリアしました

コード:

-(void)textFieldDidEndEditing:(UITextField *)textField  {
 
    charaname = [NSString stringWithFormat:@"%@",[namefield text]];
   
  NSLog(@"%@",charaname);                                                     //namefieldに入力された文字列がリターンキーを押すと表示
   
  label = [CCLabelTTF labelWithString:charaname fontName:@"Times New Roman" fontSize:20];
    self.label.position = CGPointMake(230, 320);
    self.label.color = ccc3(0,0,0);
    [self addChild:self.label z:1];*/
}
当方、プログラミング歴は皆無で修行中の身ですので、これからwebや手持ちの書籍を見て原因の究明をしたいと思います

拙いソースをお見せして申し訳ありません。

ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る