gpt4 book ai didi

react-native - 使用 Swift : how to access reactTag in event 响应 native 自定义 UI 组件

转载 作者:行者123 更新时间:2023-12-01 03:37:26 29 4
gpt4 key购买 nike

在 Swift 中创建自定义 UI 组件时,如何访问 reactTag触发一个事件回到 React Native?

使用以下代码在 Swift 中创建一个具有按钮的自定义组件:
单击按钮时,使用 bridge.eventDispatchersendInputEventWithName应该在 React Native JavaScript 代码中引发一个事件。
这是通过将 reactTag 作为事件字典的一部分传递来完成的。
但是,我不清楚如何访问 reactTag 属性,甚至不清楚它在哪里可用。

(稍微挖掘一下,它似乎存在于名为 RCTShadowView 的东西上,但是 reactTag 在我的 shadowView 上始终是 nil)

迅速

//  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)
}
}

objective-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需要能够看到self.reactTag , 声明于 UIView+React.h .

这需要添加到项目的Bridging-Header.h .

#import "UIView+React.h"

旁注:您可能不想使用 sendInputEventWithName直接,但使用给出的答案的 Swifty 变体 here

关于react-native - 使用 Swift : how to access reactTag in event 响应 native 自定义 UI 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33505147/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com