在
Swift中创建自定义UI组件时,如何访问reactTag以将事件触发回React Native?
使用以下代码在Swift中创建一个具有按钮的自定义组件:
单击该按钮时,使用bridge.eventDispatcher sendInputEventWithName应该在React Native JavaScript代码中引发一个事件.
这是通过将reactTag作为事件字典的一部分传递来完成的.
但是,我不清楚如何访问reactTag属性,甚至是可用的属性.
(稍微挖了一下似乎它出现在一个名为RCTShadowView的东西上,但是在我的shadowView上,reactTag总是为零)
迅速
// FooView.swift
import UIKit
@objc(FooView)
class FooView: UIView {
@objc var bridge: RCTBridge!
required override init(frame: CGRect) {
super.init(frame: frame)
let button = UIButton(frame: CGRect(x: 10, y: 10, width: 244, height: 244))
button.addTarget(self, action: "buttonClicked:", forControlEvents: .TouchUpInside)
self.addSubview(button)
}
func buttonClicked(sender: AnyObject?) {
let event = [
"target": "", // <-- how can one get access to the reactTag property?
]
self.bridge.eventDispatcher.sendInputEventWithName("topChange", body: event)
}
}
目标C.
// FooViewBridge.m
#import "RCTBridgeModule.h"
#import "RCTViewManager.h"
#import "FooProj-Swift.h"
@interface RCTFooViewManager : RCTViewManager
@end
@implementation RCTFooViewManager
RCT_EXPORT_MODULE()
- (UIView *)view
{
FooView* fooView = [[FooView alloc] init];
fooView.bridge = self.bridge;
fooView.shadowView = self.shadowView; // <-- was hoping this would have a reactTag but it's always nil
return fooView;
}
@end
最佳答案 FooView.swift需要能够看到在UIView React.h中声明的self.reactTag.
这需要添加到项目的Bridging-Header.h中.
#import "UIView+React.h"
旁注:您可能不希望直接使用sendInputEventWithName,但使用给定的答案的Swifty变体here