Problem z nieodrzucaniem klawiatury staje się poważniejszy, jeśli masz keyboardType='numeric', ponieważ nie ma możliwości jej odrzucenia.
Zastąpienie widoku ScrollView nie jest prawidłowym rozwiązaniem, ponieważ jeśli masz wiele textInputs lub buttons, stuknięcie ich przy podniesionej klawiaturze spowoduje tylko zwolnienie klawiatury.
Prawidłowym sposobem jest hermetyzowanie widoku za pomocą TouchableWithoutFeedbacki wywoływaniaKeyboard.dismiss()
EDYCJA: Możesz teraz używać ScrollViewz, keyboardShouldPersistTaps='handled'aby zamknąć klawiaturę tylko wtedy, gdy dzieci nie obsługują stuknięcia (tj. Stukanie w inne wejścia tekstowe lub przyciski)
Jeśli masz
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
Zmień to na
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
lub
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
EDYCJA: Możesz również utworzyć komponent wyższego rzędu, aby zamknąć klawiaturę.
import React from 'react';
import { TouchableWithoutFeedback, Keyboard, View } from 'react-native';
const DismissKeyboardHOC = (Comp) => {
return ({ children, ...props }) => (
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<Comp {...props}>
{children}
</Comp>
</TouchableWithoutFeedback>
);
};
const DismissKeyboardView = DismissKeyboardHOC(View)
Po prostu użyj tego w ten sposób
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
UWAGA: accessible={false}jest to konieczne, aby formularz wprowadzania był nadal dostępny za pośrednictwem VoiceOver. Ludzie niedowidzący będą ci wdzięczni!