2017-05-08 114 views
0

我有一个反应视图作为本地View Controller的主视图。我希望我的本机View Controller在ViewDidAppear之后派发一个事件,即我的反应组件NativeEventEmitter正在侦听。iOS反应原生:从ViewDidAppear发出事件到查看组件

componentDidMount(){ 
    const eventManager = new NativeEventEmitter(ReactMainManager); 

    this._subscription = eventManager.addListener(
     'ViewDidLoad', 
     (info) => { 
      //.. do something 
     } 
    ); 
    ... 

InsideEventEmitter

@objc func viewWasHit(_ callback: RCTResponseSenderBlock){ 
    self.sendEvent(withName: "ViewDidLoad", body: []) 
} 

内ReactViewController

class subClassReactViewController: ReactViewController{ 
    override func viewDidAppear(_ animated: Bool){ 
    if let reactView = reactRootView as? RCTRootView{ 
     //How do I fire viewHasHit from here? 
    } 
    } 
} 

回答

0

我最终使用的通知中心缺乏一个更好的解决方案。

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    NotificationCenter.default.post(name: NSNotification.Name("InfoViewAppeared"), object: nil) 
} 

在RCTEventEmitter

类ReactAccountInfoManager:RCTEventEmitter {

override init() { 
    super.init() 
    NotificationCenter.default.addObserver(self, selector: #selector(ReactAccountInfoManager.viewAppeared), name: NSNotification.Name(rawValue: "InfoViewAppeared"), object: nil) 
} 

deinit { 
    NotificationCenter.default.removeObserver(self) 
} 



@objc func viewAppeared(){ 

    self.sendEvent(withName: "ViewAppeared", body: headerDictionary) 

}