问题
I'm working on a search component right now which consists of a TextInput and a ListView. It loads its results from an external server and fills the ListView accordingly.
There's also a TouchableOpacity which closes the search component.
Unfortunately, it takes two presses to get the onPress callback of the TouchableOpacity called – one to let the TextInput lose its focus and one to trigger the callback. But if I press the TouchableOpacity to close the search component or if I press one of the tabs of the "react-native-scrollable-tab-view" component it reacts immediately and the TextInput even keeps its focus.
So, I'm wondering if someone knows if the ListView somehow consumes the touches due to its scroll functions.
回答1:
The ScrollView
(and legacy ListView
) component has a prop keyboardShouldPersistTaps which takes three options:
never
(the default), tapping outside of the focused text input when the keyboard is up dismisses the keyboard. When this happens, children won't receive the tap.always
, the keyboard will not dismiss automatically, and the scroll view will not catch taps, but children of the scroll view can catch taps.handled
, the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor).
Example
<ScrollView keyboardShouldPersistTaps="always">
// Your TextInput and Button here…
</ScrollView>
I set this property to true and it works as expected. =)
来源:https://stackoverflow.com/questions/34290787/touchableopacity-as-item-in-listview-only-reacts-after-textinput-has-lost-focus