反应原生原生模块 RCTBubblingEventBlock 为空
Posted
技术标签:
【中文标题】反应原生原生模块 RCTBubblingEventBlock 为空【英文标题】:React native Native module RCTBubblingEventBlock is null 【发布时间】:2019-09-10 11:28:11 【问题描述】:尝试从本机模块创建回调,但未触发回调。调用本机模块的代码似乎工作正常,它打开了扫描应用程序,但似乎根本无法让回调工作
这是我的代码。
@objc (ScanImageView)
class ScanImageViewController: UIViewController, ScanningViewControllerDelegate
@objc var onImageCapture: RCTBubblingEventBlock?
@objc
static func requiresMainQueueSetup() -> Bool
return true
@objc func startScan()
print("What had I created")
DispatchQueue.main.async
self.getTopMostViewController()?.present(ScanningViewController(delegate: self), animated: true)
func getTopMostViewController() -> UIViewController?
var topMostViewController = UIApplication.shared.keyWindow?.rootViewController
while let presentedViewController = topMostViewController?.presentedViewController
topMostViewController = presentedViewController
return topMostViewController
func scanningViewControllerDidCancel(_ controller: ScanningViewController)
print("Dismiss called")
controller.dismiss(animated: true)
func scanningViewController(_ controller: ScanningViewController, didScan pointCloud: SCPointCloud)
print("scanningViewController called")
print("scanningViewController called")
if(self.onImageCapture != nil)
let event = ["startTime": "testing"]
self.onImageCapture!(event)
controller.dismiss(animated: true)
这里是 RCT_EXPORT_METHOD() 宏的代码:
#import "React/RCTBridgeModule.h"
#import "React/RCTViewManager.h"
@interface RCT_EXTERN_MODULE(ScanImageView, UIViewController)
RCT_EXTERN_METHOD(startScan)
RCT_EXPORT_VIEW_PROPERTY(onImageCapture, RCTBubblingEventBlock)
@end
.js 文件只有一个按钮,单击该按钮会调用 startScan 方法,并且似乎工作正常。
<button
onPress=this.turnOn
title="Turn ON "
color="#FF6347"
onImageCapture=this._onImageCapture/>
根本没有调用的 onImageCapture。在过去的 5 个小时里,我一直在尝试。谁能指导我如何让回调为此工作。
提前致谢。
【问题讨论】:
【参考方案1】:我找到了使用 sendEvent(withName: "", body: []) 函数的解决方案。必须对我的代码进行以下更改
class ScanImageViewController: UIViewController, ScanningViewControllerDelegate
上面改成
class ScanImageViewController: RCTEventEmitter, ScanningViewControllerDelegate
还得加进去
@objc
override func supportedEvents() -> [String]!
//Event names
return ["onImageCapture", "onImageCompleted"]
在 .js 文件中,您需要添加一个处理程序来监听事件
ScanImageEvents.addListener('onImageCompleted', ( imageData ) =>
console.log('onImageCompleted')
)
希望这对某人有所帮助
【讨论】:
以上是关于反应原生原生模块 RCTBubblingEventBlock 为空的主要内容,如果未能解决你的问题,请参考以下文章
如何编写重用通用 JavaScript 代码的反应原生“本机模块”(桥)?