Czy ktoś może zaproponować kilka linków do używania UITextField w cocos2d. Chcę nacisnąć na etykietę, a następnie wybrać opcję UITextField
i potrzebuję edytować na tej UITextField
.Przykład UITextField w Cocos2d
Odpowiedz
Robię to w bieżącym projekcie, aby umożliwić wprowadzenie liczby poziomów do rozpoczęcia gry, dlatego moje zmienne i metody są nazywane takimi, jakimi są; prawdopodobnie powinieneś dostosować te ustawienia, by nadać im sens.
W kontrolerze aplikacji, określić to jako zmiennej instancji:
UITextField *levelEntryTextField;
Tworzenie go wewnątrz applicationDidFinishLaunching:
levelEntryTextField = [[UITextField alloc] initWithFrame:
CGRectMake(60, 165, 200, 90)];
[levelEntryTextField setDelegate:self];
Zdefiniować metodę aktywacji w polu tekstowym. Powinieneś również zadeklarować go w pliku nagłówkowym kontrolera aplikacji.
- (void)specifyStartLevel
{
[levelEntryTextField setText:@""];
[window addSubview:levelEntryTextField];
[levelEntryTextField becomeFirstResponder];
}
To sprawi, naciskając przycisk „powrót” w edycji końcowej klawiatura
- (BOOL)textFieldShouldReturn:(UITextField*)textField {
//Terminate editing
[textField resignFirstResponder];
return YES;
}
ten jest wyzwalany, gdy edycja jest faktycznie wykonywana.
- (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;
}
}
Teraz, aby faktycznie uruchomić ruch, umieszczasz to gdzieś. Ja nazywam to od wewnątrz jednego z moich zajęć tematycznych, w odpowiedzi na działania użytkownika:
[[[UIApplication sharedApplication] delegate] specifyStartLevel];
Wziąłem przykład, że Jack dostarczonego i faktycznie stworzyli projekt roboczy, to było zrobione za pomocą szablonu XCode Cocos2d 0.7.1 , a następnie edycję plików * AppDelegate.m/.h, które są podane poniżej w całości. Zmodyfikowałem także część tego, co powiedział Jack, ponieważ uważam, że utworzenie UITextField w appDidFinishLoading zużywa nieco za dużo pamięci, szczególnie jeśli pole tekstowe nie jest używane przez cały czas ... to rozwiązanie tworzy pole tekstowe tylko wtedy, gdy jest jest potrzebny, próbka rysuje pustą scenę Cocos2D Layer, a na ekranie dotykowym wyświetla pole tekstowe, w którym możesz rozpocząć wprowadzanie tekstu. Wypluje wynik tego, co wprowadziłeś do Konsoli - możesz przekazać to, co jest konieczne w twoim własnym kodzie.
.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
a następnie .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
dzięki bro. nice done – OMGPOP
Powinno to być okno [[[[CCD director sharedDirector] openGLView]] addSubview: myText]; w miejsce okna [[[[director sharedDirector] openGLView]] addSubview: myText]; –
Spróbuj następujące podklasy CCNode, CCMenuItemTextField, używać pól tekstowych w Cocos2d.
Klasa jest bezpośrednio podklasowana z CCMenuItemSprite. Po dotknięciu wywoływana jest "wybrana" metoda, a do głównego okna dodawany jest UITextField. Po zakończeniu edycji, wywoływana jest metoda "niewybraną", a ekran UITextField jest usuwany z ekranu. Wprowadzane przez użytkownika dane są zapisywane w węźle CCLabelTTF, który jest dokładnie taki sam, jak oryginalny 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
Z jakiej wersji Cocos2D korzystałeś? Wydaje się, że nie działa bezpośrednio z v1.1. –
Aby dodać pole tekstowe w Cocos2d jak poniżej kod
przede wszystkim dodać widok na scenę i afetr doda tekstowym dodać w widoku ów bardzo łatwe.
-(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;
}
można również użyć CCTextfield w Cocos2d Najlepszym przykładem jest https://github.com/iNinja/CCTextField
- 1. wcięcia w UITextField
- 2. zatrzymać efekt w cocos2d?
- 3. Ograniczyć sprite w cocos2d
- 4. Strumień świetlny w cocos2d
- 5. cocos2d. Prawidłowe mieszanie?
- 6. Wyłączanie "Definiuj" w UITextField
- 7. Wyłączyć Lupę w UITextField
- 8. Jak wypełnić teksturę w cocos2d?
- 9. UITextField setVisible?
- 10. Cocos2D-X dla Androida, Symbol "cocos2d" nie mógł zostać rozwiązany
- 11. Animacja przeniesienia Cocos2d na ścieżce
- 12. dodaj przycisk do uitextfield
- 13. Dodaj UITextField do UIToolbar
- 14. HTTPS na Cocos2d-x
- 15. Różnica między cocos2d-android i cocos2d-android-1
- 16. Wykryj dotyk Cocos2d-x
- 17. Cocos2d + box2d lub Chipmunk
- 18. Wykryj zdarzenie Backspace w UITextField
- 19. Przeniesienie kursora programowego w UiTextField
- 20. Przykład makiety RSpec Przykład
- 21. Wdrożenie maskę wprowadzania do UITextField
- 22. Jak utworzyć wielowierszowy UITextfield?
- 23. Jak dodać obsługę iPhone5 w Cocos2d
- 24. Jak mogę wyśrodkować małą CCTMXTileMap w cocos2d?
- 25. Różnica między sceną a warstwą w cocos2d
- 26. jak się uczyć "Animacje w COCOS2D"
- 27. Jak mogę odtwarzać muzykę w cocos2d?
- 28. cocos2d Błąd OpenGL 0x0502 w - [EAGLView swapBuffers]
- 29. Szacowanie wykorzystania pamięci w grze Cocos2d
- 30. losowe BOOLs w sposób efektywny dla Cocos2d
hej, próbowałem ten sposób, ale tylko pokazuje się klawiatura. nie widziałem pola tekstowego – OMGPOP
Spróbuj [textBox setTextColor: [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 1.0]]; [textBox setBackgroundColor: [UIColor colorWithRed: 255 green: 255 blue: 255 alpha: 1.0]]; – RSH1
co to jest 'window' w' specifyStartLevel'? ok dla tych prawdziwych początkujących jest to okno '[[[widok [CCDdirectorDirector]]]. – Claudiu