2016-09-11 19 views
1

反応ネイティブのネイティブUIコンポーネントを作成しようとしていますが、イベントシステムの仕組みを理解する上で問題があります。私はドキュメントを読んだことがあります。残念ながら、obj-cに特有なので、特にあまり便利ではありませんでした。スウィフトもあまり快適ではありませんが、私は現時点で学んでいる言語です。以下のコードは私がこれまでに持っていたものであり、アプリケーションはちゃんとロードされます(XCodeでは問題ありません)。RCTDirectEventBlockを呼び出すとJSコードがトリガーされない

CustomViewManager.swift

import Foundation 

@objc(CustomViewManager) 
class CustomViewManager : RCTViewManager { 
    override func view() -> UIView! { 
    return CustomView(); 
    } 
} 

CustomViewManagerBridge.m

#import "RCTBridgeModule.h" 
#import "RCTViewManager.h" 

@interface RCT_EXTERN_MODULE(CustomViewManager, RCTViewManager) 

RCT_EXPORT_VIEW_PROPERTY(onPress, RCTDirectEventBlock) 
RCT_EXPORT_VIEW_PROPERTY(list, NSArray) 

@end 

CustomView.h

#import "RCTView.h" 
@interface CustomView : RCTView 
@property (nonatomic, assign) NSArray *list; 
@property (nonatomic, copy) RCTDirectEventBlock onPress; 
@end 

CustomView.swift

import Foundation 
import UIKit 

@objc(CustomView) 
class CustomView : UIView { 

    var list: [CGFloat]? { 
    didSet { 
     print("set list") 
    } 
    } 

    override init(frame: CGRect) { 
    super.init(frame: frame); 
    } 

    required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
    } 

    func setOnPress(callback: RCTDirectEventBlock) { 
    print("set onPress", callback) 
    let dict:[NSObject:AnyObject] = [ 
     "hello": "world", 
     ] 
    callback(dict) 
    } 

} 

そして、以下のコードを使用して反応するからそれを呼び出す:

<CustomView list={[1,2,3]} onPress={data => console.log('js', data)} /> 

これはある程度正常に動作します。私は迅速なコードから渡される小道具にアクセスすることができます。私はリストとonPress関数を取得します。 しかし、私がcallbackと呼ぶとき、console.logは引き起こされず、私はなぜそれほど確かではありません。どんな助力があれば幸いです。

おかげで、 ゴルダン

答えて

0

[OK]を、

は私が間違っプロパティタイプを使用していたことが分かりました。 RCTDirectEventBlockRCTBubblingEventBlockに変更すると、このトリックが実行されました。

関連する問題