我正在编写一个库,我想将自定义属性添加到现有的React Native视图中,这些视图将由我的库处理。例如,
UIView
我希望我的objc库能够访问要应用此属性的RCTView
或{{1}}。有人有什么想法吗?
答案 0 :(得分:1)
好的,这是我可以提供的最佳解决方案。我使用findNodeHandle
将元素的标识符传递给我的RCTBridgeModule
,然后使用RCTUIManager
获取UIView
。
在我的index.ios.js中(或者你想要访问该元素的任何地方),我将创建对我的元素的引用,并通过调用findNodeHandle
来传递该元素的ID桥模块。
var React = require('react-native');
var { findNodeHandle } = React;
const MyCustomBridge = React.NativeModules.MyCustomBridge;
var TestFairy = React.createClass({
componentDidMount: function() {
MyCustomBridge.something(findNodeHandle(this.refs.instructions));
},
render: function() {
return (
<Text style={styles.instructions} ref="instructions">Hello</Text>
);
}
});
然后在RCTMyCustomBridge.m
中,我会使用findNoderHandle
将从RCTUIManager#addUIBlock
收到的ID转换为UIView。重要的是你在正确的线程上调用该方法,所以我使用RCTUIManager#methodQueue
并调用dispatch_async
。
RCT_EXPORT_METHOD(something:(nonnull NSNumber *)reactTag) {
dispatch_async(_bridge.uiManager.methodQueue, ^{
[_bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
UIView *view = viewRegistry[reactTag];
if (view != nil) {
// Do the magic!
}
}];
});
}
希望这对尝试访问React Native元素的基础UIView
的人有用。这不是我最初的问题所要求的,但是,这是一种完成同样事情的迂回方式。