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 textInput
s lub button
s, stuknięcie ich przy podniesionej klawiaturze spowoduje tylko zwolnienie klawiatury.
Prawidłowym sposobem jest hermetyzowanie widoku za pomocą TouchableWithoutFeedback
i wywoływaniaKeyboard.dismiss()
EDYCJA: Możesz teraz używać ScrollView
z, 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!