如何将react组件作为本机视图属性传递

时间:2019-01-06 05:07:32

标签: swift react-native react-native-ios native-module react-native-native-module

我正在尝试使用一些本机UI组件和一些React组件构建一个本机应用程序。我想要一个本机ui组件,该组件将react组件作为属性,并将其呈现为子视图。

我经历了制作本机ui组件的正常过程,并使用RCT_EXPORT_VIEW_PROPERTY(view, RCTView)来获取view属性。

PagedUIViewManager.swift:

@objc(PagedUIViewManager)
class PagedUIViewManager: RCTViewManager {
  override func view() -> UIView! {
    return PagedUIView();
  }
  override static func requiresMainQueueSetup() -> Bool {
    return true
  }
}

PagedUIView.swift:

class PagedUIView: UIView {
  @objc var view: UIView {
    didSet {
      for subview in self.subviews {
        subview.removeFromSuperview()
      }
      self.addSubview(view)
    }
  }
  override init(frame: CGRect) {
    self.view = UIView(frame: frame)
    super.init(frame: frame)
    self.addSubview(view)
  }
}

PagedUIViewManager.m:

#import "React/RCTViewManager.h"
@interface RCT_EXTERN_MODULE(PagedUIViewManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(view, RCTView)
@end

PagedUINativeView.js:

const PagedUI = requireNativeComponent("PagedUIView");
export default class PagedUIView extends React.Component {
  render() {
    return <PagedUI {...this.props}/>;
  }
}

用法:

<PagedUIView view={<ComponentToRender />} />

我希望该视图显示<ComponentToRender />,但是却收到运行时错误“不变违反:435,PagedView,1,[对象对象]不能用作本机方法参数”。

1 个答案:

答案 0 :(得分:0)

目前尚不可能,这是将视图传递给将子视图传递给本机模块的唯一方法。

您可以使用以下方式接收视图:

@objc override func insertReactSubview(_ subview: UIView!, at atIndex: Int)