mirror of https://github.com/axmolengine/axmol.git
fix iOS EditBox Chinese input maxLength issue.
https://github.com/cocos2d/cocos2d-x/issues/12519
This commit is contained in:
parent
5e21580cdd
commit
f9385d1604
|
@ -109,7 +109,8 @@ static const int CC_EDIT_BOX_PADDING = 5;
|
||||||
textField.hidden = true;
|
textField.hidden = true;
|
||||||
textField.returnKeyType = UIReturnKeyDefault;
|
textField.returnKeyType = UIReturnKeyDefault;
|
||||||
|
|
||||||
[textField addTarget:self action:@selector(textChanged) forControlEvents:UIControlEventEditingChanged];
|
[textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged];
|
||||||
|
|
||||||
|
|
||||||
self.textField = textField;
|
self.textField = textField;
|
||||||
self.editBox = editBox;
|
self.editBox = editBox;
|
||||||
|
@ -189,8 +190,13 @@ static const int CC_EDIT_BOX_PADDING = 5;
|
||||||
/**
|
/**
|
||||||
* Called each time when the text field's text has changed.
|
* Called each time when the text field's text has changed.
|
||||||
*/
|
*/
|
||||||
- (void)textChanged
|
- (void)textChanged:(UITextField*)textField
|
||||||
{
|
{
|
||||||
|
int maxLength = getEditBoxImplIOS()->getMaxLength();
|
||||||
|
if (textField.text.length > maxLength) {
|
||||||
|
textField.text = [textField.text substringToIndex:maxLength];
|
||||||
|
}
|
||||||
|
|
||||||
cocos2d::ui::EditBoxDelegate *pDelegate = getEditBoxImplIOS()->getDelegate();
|
cocos2d::ui::EditBoxDelegate *pDelegate = getEditBoxImplIOS()->getDelegate();
|
||||||
if (pDelegate != NULL)
|
if (pDelegate != NULL)
|
||||||
{
|
{
|
||||||
|
@ -287,18 +293,25 @@ static const int CC_EDIT_BOX_PADDING = 5;
|
||||||
*/
|
*/
|
||||||
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
|
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
|
||||||
{
|
{
|
||||||
if (getEditBoxImplIOS()->getMaxLength() < 0)
|
int maxLength = getEditBoxImplIOS()->getMaxLength();
|
||||||
|
if (maxLength < 0)
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevent crashing undo bug http://stackoverflow.com/questions/433337/set-the-maximum-character-length-of-a-uitextfield
|
||||||
|
if(range.length + range.location > textField.text.length)
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
NSUInteger oldLength = textField.text.length;
|
NSUInteger oldLength = textField.text.length;
|
||||||
NSUInteger replacementLength = string.length;
|
NSUInteger replacementLength = string.length;
|
||||||
NSUInteger rangeLength = range.length;
|
NSUInteger rangeLength = range.length;
|
||||||
|
|
||||||
NSUInteger newLength = oldLength - rangeLength + replacementLength;
|
NSUInteger newLength = oldLength - rangeLength + replacementLength;
|
||||||
|
|
||||||
return newLength <= getEditBoxImplIOS()->getMaxLength();
|
return newLength <= maxLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in New Issue