react-native 0.55.4 TextInput在iOS上不能修改value值问题

参考了0.57的源码,但是发现如果value初始设置为空字符时整个输入框就不能输入了,所以在这个基础上我调整了一下代码,解决了这个问题,+开头的就是新增代码,暂时运行稳定,如果有疑问可以留言联系我。

//RCTBaseTextInputShadowView.m

@implementation RCTBaseTextInputShadowView
{
  __weak RCTBridge *_bridge;
  NSAttributedString *_Nullable _previousAttributedText;
  BOOL _needsUpdateView;
  NSAttributedString *_Nullable _localAttributedText;
  CGSize _previousContentSize;

  NSTextStorage *_textStorage;
  NSTextContainer *_textContainer;
  NSLayoutManager *_layoutManager;
+  NSString *_text;
+  NSString *_haveDefaultText;
}

+- (NSString *)text
+{
+  return _text;
+}
+- (void)setText:(NSString *)text
+{
+  if (!_haveDefaultText) {
+    if (text.length) {
+      _haveDefaultText = @"1";
+    } else {
+      _haveDefaultText = @"0";
+    }
+  }
+  NSString *textTemp = _text;
+  _text = text;
+  
+  // Clear `_previousAttributedText` to notify the view about the change
+  // when `text` native prop is set.
+  NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithAttributedString:[self attributedTextWithBaseTextAttributes:nil]];
+  
+  [attributedText removeAttribute:RCTBaseTextShadowViewEmbeddedShadowViewAttributeName
                            range:NSMakeRange(0, attributedText.length)];
+  
+  [attributedText removeAttribute:RCTTextAttributesTagAttributeName
                            range:NSMakeRange(0, attributedText.length)];
+  if ((_haveDefaultText && text && text.length==0) || ([_haveDefaultText isEqualToString:@"1"] && textTemp.length)) {
+    NSAttributedString *propertyAttributedText =
+    [[NSAttributedString alloc] initWithString:textTemp?textTemp:@""
                                    attributes:self.textAttributes.effectiveTextAttributes];
+    [attributedText insertAttributedString:propertyAttributedText atIndex:0];
+  }
+  
+  _previousAttributedText = [attributedText copy];
+  
+  [self dirtyLayout];
+}

参考:https://github.com/facebook/react-native/issues/18874

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容