誰でもcocos2dでUITextFieldを使用するためのリンクを提案してください。 ラベルを押したければ、UITextField
が選択され、その上で編集する必要がありますUITextField
。UITextFieldの例(Cocos2d)
答えて
私は現在のプロジェクトでこれをやっていますので、再生するレベルの番号を入力することができます。そのため、変数とメソッドの名前はそのままです。おそらくあなたのためにこれらを調整する必要があります。アプリのコントローラで
、インスタンス変数としてこれを定義します。
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];
私はこれは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
ありがとう。 nice done – OMGPOP
[[[CCDirector sharedDirector] openGLView]ウィンドウ] [addSubview:myText];そうする必要があります。 [[[Director sharedDirector] openGLView]ウィンドウの代わりに] addSubview:myText]; –
は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
どのようなCocos2dバージョンを使用しましたか? v1.1では直接動作しないようです。 –
は非常に簡単に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;
}
- 1. Cocos2d-Xメニューコールバック例外例外
- 2. キーボードがcocos2dにuitextfieldを表示しない
- 3. UITextField内のUITextField?
- 4. cocos2dのテストの例が動作しない
- 5. iPhone用Cocos2d対Cocos2d-x
- 6. cocos2d-x v3 C++ドロップシャドウcocos2d :: Sprite
- 7. cocos2d
- 8. Cocos2d
- 9. Cocos2d
- 10. cocos2d-android-cocos2d-android-1の相違点
- 11. XCodeのUITextFieldの
- 12. UITextFieldの削除
- 13. UITextfieldのキャンセルボタン
- 14. UITableView内のUITextField
- 15. uitableviewのUitextfield
- 16. UITableViewCellのUITextField
- 17. カスタムセルのUITextfieldフォーカス
- 18. iOS CustomKeyboardのUITextField
- 19. UITableViewCellのUITextField
- 20. UITextFieldDelegateはUITextFieldの
- 21. UITextFieldのタッチイベントrightView
- 22. UITextFieldのUITextPosition
- 23. UITextFieldの高さ
- 24. UITextFieldの問題
- 25. UITextFieldのテキスト
- 26. UITableViewCellのUITextField
- 27. UITextFieldのバインド
- 28. uitextfieldのカスタムボーダー
- 29. センターUITextFieldの
- 30. cocos2dのカウントダウンタイマー?
私はこの方法を試してみたが、唯一のキーボードが現れています。テキストフィールドが表示されませんでした – OMGPOP
[textBox setTextColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]]; [テキストボックスsetBackgroundColor:[UIColor colorWithRed:255緑:255青:255アルファ:1.0]]; – RSH1
'' SpecifyStartLevel'の 'window'は何ですか?本当の初心者であればOKです。[[[CCDirector sharedDirector]ビュー]ウィンドウ] ''です。 – Claudiu