Skip to content

Commit

Permalink
Revert of [D13948951]Apply the fix for CJK languages on single-line t…
Browse files Browse the repository at this point in the history
…est fields.

Summary:
This PR (#22546) broke single line text inputs. After inputting some text and tapping away, the text input reverts back to default text.

Revert solved the issue.

Reviewed By: cpojer

Differential Revision: D14185897

fbshipit-source-id: cc7f0f2ebfb0494062afbc628c4fe27ad27fb1c6
  • Loading branch information
Peter Argany authored and facebook-github-bot committed Feb 22, 2019
1 parent 4a5266c commit e38be82
Showing 1 changed file with 0 additions and 44 deletions.
44 changes: 0 additions & 44 deletions Libraries/Text/TextInput/Singleline/RCTUITextField.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

@implementation RCTUITextField {
RCTBackedTextFieldDelegateAdapter *_textInputDelegateAdapter;
NSMutableAttributedString *_attributesHolder;
}

- (instancetype)initWithFrame:(CGRect)frame
Expand All @@ -26,7 +25,6 @@ - (instancetype)initWithFrame:(CGRect)frame
object:self];

_textInputDelegateAdapter = [[RCTBackedTextFieldDelegateAdapter alloc] initWithTextField:self];
_attributesHolder = [[NSMutableAttributedString alloc] init];
}

return self;
Expand Down Expand Up @@ -119,48 +117,6 @@ - (CGRect)caretRectForPosition:(UITextPosition *)position
return [super caretRectForPosition:position];
}

#pragma mark - Fix for CJK Languages

/*
* The workaround to fix inputting complex locales (like CJK languages).
* When we use `setAttrbutedText:` while user is inputting text in a complex
* locale (like Chinese, Japanese or Korean), some internal state breaks and
* input stops working.
*
* To workaround that, we don't skip underlying attributedString in the text
* field if only attributes were changed. We keep track of these attributes in
* a local variable.
*
* There are two methods that are altered by this workaround:
*
* (1) `-setAttributedText:`
* Applies the attributed string change to a local variable `_attributesHolder` instead of calling `-[super setAttributedText:]`.
* If new attributed text differs from the existing one only in attributes,
* skips `-[super setAttributedText:`] completely.
*
* (2) `-attributedText`
* Return `_attributesHolder` context.
* Updates `_atributesHolder` before returning if the underlying `super.attributedText.string` was changed.
*
*/
- (void)setAttributedText:(NSAttributedString *)attributedText
{
BOOL textWasChanged = ![_attributesHolder.string isEqualToString:attributedText.string];
[_attributesHolder setAttributedString:attributedText];

if (textWasChanged) {
[super setAttributedText:attributedText];
}
}

- (NSAttributedString *)attributedText
{
if (![super.attributedText.string isEqualToString:_attributesHolder.string]) {
[_attributesHolder setAttributedString:super.attributedText];
}

return _attributesHolder;
}

#pragma mark - Positioning Overrides

Expand Down

0 comments on commit e38be82

Please sign in to comment.