cocos2dx 2.2.5 CCEditBox IOS 适配问题

最近做着CCEditBox 时,发现点击后,里面的文字没有适配的

今天比较,所以解决一下这个问题

找到CCEditBox点击时响应的函数是  CCEditBoxImplIOS::openKeyboard 

 

我们可以看看这个函数写了什么:


-(void) openKeyboard

{    

    [[EAGLView sharedEGLView] addSubview:textField_];   // 添加 作为 subView

    [textField_ becomeFirstResponder];          

}


完全没有对textField_ 进行处理,于是我对这个textField_进行了处理

由于对objective-c 的类的属性不熟悉,所以问了一下度娘,这样也不是办法!

于是想到,textField_肯定要初始化的,所以在 CCEditBoxImplIOS 这个源文件里,找到了下面这段代码

-(id) initWithFrame: (CGRect) frameRect editBox: (void*) editBox
{
    self = [super init];
    
    do
    {
        if (self == nil) break;
        editState_ = NO;
        self.textField = [[[CustomUITextField alloc] initWithFrame: frameRect] autorelease];  // 初始化frame
        if (!textField_) break;
        [textField_ setTextColor:[UIColor whiteColor]];
        textField_.font = [UIFont systemFontOfSize:frameRect.size.height*2/3];           // 初始化font
		textField_.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        textField_.backgroundColor = [UIColor clearColor];
        textField_.borderStyle = UITextBorderStyleNone;
        textField_.delegate = self;
        textField_.hidden = true;
		textField_.returnKeyType = UIReturnKeyDefault;
        [textField_ addTarget:self action:@selector(textChanged) forControlEvents:UIControlEventEditingChanged];
        self.editBox = editBox;
        
		
        
        return self;
    }while(0);
    
    return nil;
}

  

参照着下面三行代码:

        self.textField = [[[CustomUITextField alloc] initWithFrame: frameRect] autorelease];
        if (!textField_) break;
        [textField_ setTextColor:[UIColor whiteColor]];
        textField_.font = [UIFont systemFontOfSize:frameRect.size.height*2/3]; 

 

添加了如下代码

-(void) openKeyboard
{
    /*******
     ***   add by author: zero
     ***   description : CCEditBox ios 适配问题
     *******/
    
    CGFloat scale = [[EAGLView sharedEGLView] contentScaleFactor];
    CGRect rect = [textField_ frame];
    textField_.font = [UIFont systemFontOfSize:[textField_ frame].size.height * scale*2/3];
    [textField_ setFrame:CGRectMake(rect.origin.x, rect.origin.y, rect.size.width * scale, rect.size.height * scale)];
    [[EAGLView sharedEGLView] addSubview:textField_];
    [textField_ becomeFirstResponder];
}

 

 最后得到完美的成果!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。