重新映射本机组件属性的正确方法是什么

时间:2017-02-27 16:18:08

标签: ios swift react-native

我是swift and react-native的新手。

有一个名为NativeComp的第三方本机组件,它是UIView的子类。

我希望将其包装为react-native组件并将js属性重新映射到本机属性(一些重命名工作)

例如

js

 <RNComponent config={enable:true, size:5}/>

将导致本机代码。

component.enable=true
component.size=5
  • 方法1

    RNComponent扩展NativeComp,并在此函数中添加一个新的setConfig,configue self。

    它有效,但有点奇怪。

  • 方法2 编写一个Standlone UIView类ContainerView,将NativeComp添加为子视图。

    override init(frame: CoreGraphics.CGRect) {
    
        self._component = NativeComp(frame: frame);
    
        super.init(frame: frame);
    
        self.addSubview(_component);
    
    }
    
    override func reactSetFrame(_ frame: CGRect)
    {
        _component.reactSetFrame(frame);
    }
    

    它看起来比方法1更清晰,但由于_component超出了ContainerView边框,因此缺少触摸事件。

    如果我把它写成

    override func reactSetFrame(_ frame: CGRect)
    {
        self.reactSetFrame(frame);
        _component.reactSetFrame(frame);
    }
    

exec bad access

程序崩溃self.reactSetFrame(frame);

我不太明白为什么。

将js属性重新映射到现有本机组件的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我的错误。

self.reactSetFrame(frame)将导致无限递归。

更改为super.reactSetFrame后,一切正常。