誰もがcocos2dでUITextFieldを使用するためのいくつかのリンクを提案できますか?ラベルを押したいのですが、UITextField
選択する必要があり、それを編集する必要がありますUITextField
。
4 に答える
私は現在のプロジェクトでこれを行って、プレイを開始するレベルの番号を入力できるようにしています。そのため、私の変数とメソッドはそのままの名前になっています。おそらく、これらを調整して、自分にとって意味のあるものにする必要があります。
アプリ コントローラーで、これをインスタンス変数として定義します。
UITextField *levelEntryTextField;
applicationDidFinishLaunching 内に作成します。
levelEntryTextField = [[UITextField alloc] initWithFrame:
CGRectMake(60, 165, 200, 90)];
[levelEntryTextField setDelegate:self];
テキスト フィールドをアクティブにするメソッドを定義します。アプリ コントローラーのヘッダー ファイルでも宣言する必要があります。
- (void)specifyStartLevel
{
[levelEntryTextField setText:@""];
[window addSubview:levelEntryTextField];
[levelEntryTextField becomeFirstResponder];
}
これにより、キーパッドで「return」を押すと編集が終了します
- (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;
}
}
実際に物事を動かすには、これをどこかに置きます。ユーザーのアクションに応じて、Scene クラスの 1 つからこれを呼び出します。
[[[UIApplication sharedApplication] delegate] specifyStartLevel];
次の CCNode サブクラス CCMenuItemTextField を試して、cocos2d でテキスト フィールドを使用します。
このクラスは、CCMenuItemSprite から直接サブクラス化されています。タップすると、「selected」メソッドが呼び出され、UITextField がメイン ウィンドウに追加されます。編集が完了すると、「unselected」メソッドが呼び出され、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.m
#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