これです。
<ScrollView keyboardShouldPersistTaps="always">
<Button onPress={() => alert('Tapped')} />
<TextInput defaultValue="Please edit me" />
</ScrollView>
keyboardShouldPersistTaps="always"
概要
ReactNativeで、キーボードが出ている(テキスト入力中)に、画面上のボタンをタップする時、直接タップしてもキーボードが閉じて、もう一回タップしないと onPress
が発火しないことがあり困っていました。
調べたところ、問題は ScrollView
を使っている時です。View
ならボタンがそのままタップされます。
TextInput
にフォーカスが当たっている時、ScrollView
をタップすると、自動的にフォーカスが外れる仕様っぽいです。
よって、その仕様を解除しましょう。
雑念
ReactNative、非常に生産性高く開発できる感はあるのですが、強いて不満を言うとすれば
- 少なくとも現状の
0.52
では仕様変更が多い。ライブラリ入れようとしても、ネイティブの要素が入ってくると容易にはインストールできないし、原因の特定が難しい。 -
FlatList
のバグが多い。 - ナビゲーションを扱うのが難しい。ナビゲーションの状態をストアで管理できないから、結局コンポーネントに直書きすることになるが、それもナビゲーションのステートに関数バインドしなければなので面倒。
- スター数が多いから安直に
React Navigation
を入れたが、なかなか扱いが難しいのでReact Native Router Flux
かReact Native Navigation
を使ったほうがいいかも。特に前者。
- スター数が多いから安直に
react-**
が多い。