我正在尝试使用一些本机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,[对象对象]不能用作本机方法参数”。
答案 0 :(得分:0)
目前尚不可能,这是将视图传递给将子视图传递给本机模块的唯一方法。
您可以使用以下方式接收视图:
@objc override func insertReactSubview(_ subview: UIView!, at atIndex: Int)