Skip to content

Commit

Permalink
allow custom attributedTextWithBaseTextAttributes in RCTBaseTextShado…
Browse files Browse the repository at this point in the history
…wView subclasses (#25283)

Summary:
This is similar to #24995 but for iOS.
Motivation: when building a custom Text or TextInput (eg with rich text support), one needs custom text processing logic (turning the JS text value to a `NSAttributedString`).

RCTBaseTextShadowView contains `- (NSAttributedString *)attributedTextWithBaseTextAttributes:(nullable RCTTextAttributes *)baseTextAttributes;`

https://github.com/facebook/react-native/blob/853c667eb5a66612c33e0786ab6c458dcaee6133/Libraries/Text/BaseText/RCTBaseTextShadowView.m#L78

This method, given `self.reactSubviews` creates and returns an instance of [NSMutableAttributedString](https://developer.apple.com/documentation/foundation/nsmutableattributedstring?language=objc). It's currently possible to override this method in subclasses, but the original implementation reads and writes two cache fields which are private. This PR just changes the access modifiers so that subclasses of `RCTBaseTextShadowView` can also access the caching fields.

## Changelog

Not needed I guess.
Pull Request resolved: #25283

Test Plan: This will work just the same - works locally, CI should pass.

Differential Revision: D15873741

Pulled By: cpojer

fbshipit-source-id: dd26a4241f2ac6c0870b6c302939e2f3b0ecc8ff
  • Loading branch information
vonovak authored and facebook-github-bot committed Jun 18, 2019
1 parent ce80a67 commit 23df1b0
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 12 deletions.
5 changes: 4 additions & 1 deletion Libraries/Text/BaseText/RCTBaseTextShadowView.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ NS_ASSUME_NONNULL_BEGIN

extern NSString *const RCTBaseTextShadowViewEmbeddedShadowViewAttributeName;

@interface RCTBaseTextShadowView : RCTShadowView
@interface RCTBaseTextShadowView : RCTShadowView {
@protected NSAttributedString *_Nullable cachedAttributedText;
@protected RCTTextAttributes *_Nullable cachedTextAttributes;
}

@property (nonatomic, strong) RCTTextAttributes *textAttributes;

Expand Down
18 changes: 7 additions & 11 deletions Libraries/Text/BaseText/RCTBaseTextShadowView.m
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,6 @@ static void RCTInlineViewYogaNodeDirtied(YGNodeRef node)
}

@implementation RCTBaseTextShadowView
{
NSAttributedString *_Nullable _cachedAttributedText;
RCTTextAttributes *_Nullable _cachedTextAttributes;
}

- (instancetype)init
{
Expand Down Expand Up @@ -86,8 +82,8 @@ - (NSAttributedString *)attributedTextWithBaseTextAttributes:(nullable RCTTextAt
textAttributes = [self.textAttributes copy];
}

if (_cachedAttributedText && [_cachedTextAttributes isEqual:textAttributes]) {
return _cachedAttributedText;
if (cachedAttributedText && [cachedTextAttributes isEqual:textAttributes]) {
return cachedAttributedText;
}

NSMutableAttributedString *attributedText = [NSMutableAttributedString new];
Expand Down Expand Up @@ -133,17 +129,17 @@ - (NSAttributedString *)attributedTextWithBaseTextAttributes:(nullable RCTTextAt

[self clearLayout];

_cachedAttributedText = [attributedText copy];
_cachedTextAttributes = textAttributes;
cachedAttributedText = [attributedText copy];
cachedTextAttributes = textAttributes;

return _cachedAttributedText;
return cachedAttributedText;
}

- (void)dirtyLayout
{
[super dirtyLayout];
_cachedAttributedText = nil;
_cachedTextAttributes = nil;
cachedAttributedText = nil;
cachedTextAttributes = nil;
}

- (void)didUpdateReactSubviews
Expand Down

0 comments on commit 23df1b0

Please sign in to comment.