ios - React-Native: Cannot trigger Native UIButton touch event -


i bridging native swift module react native. created uiview creates uibutton target handler on it. renders correctly, clicking button not trigger anything. have hosted demo here: https://github.com/esbenp/react-native-swift-test

my native module simple: https://github.com/esbenp/react-native-swift-test/blob/master/ios/testmodule.swift

let button = uibutton(frame: cgrect(x: 0, y: 0, width: 200, height: 50)) button.settitlecolor(uicolor.blue, for: .normal) button.settitle("press me", for: .normal) button.addtarget(self, action: #selector(testmodule.onclick), for: .touchupinside)  self.addsubview(button) 

i bridge using manager: https://github.com/esbenp/react-native-swift-test/blob/master/ios/testmodulemanager.m

#import <react/rctviewmanager.h> #import "reactnativeswifttest-swift.h"  @interface testmodulemanager : rctviewmanager @end  @implementation testmodulemanager  rct_export_module()  - (uiview *)view {   return [[parent alloc] init]; }  @end 

and run in js: https://github.com/esbenp/react-native-swift-test/blob/master/index.ios.js

i no ios expert, seems related frame. if take same native module , use in normal ios project uiviewcontroller so:

override func viewdidappear(_ animated: bool) {     super.viewdidappear(animated)      let button = testmodule(frame: cgrect(x: 0, y: 0, width: 500, height: 500))      self.view.addsubview(button) } 

it works. assuming because frame react native creates width=0 , height=0 (it says @ least if nslog(string(describing: frame.size.height))).

the ios mapview example specifies not override frame react native set this. not know if frame wrong or missing other context here? tried following instructions #2948 #15097 nothing helps.

i found error here. turns out have add flex: 1 actual native component on js side make frame fill out properly.

before

export default class reactnativeswifttest extends component {   render() {     return (       <view style={styles.container}>         <test />       </view>     );   } } 

after

export default class reactnativeswifttest extends component {   render() {     return (       <view style={styles.container}>         <test style={{flex: 1}} />       </view>     );   } } 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -