Masalah dengan keyboard tidak menolak semakin parah jika Anda miliki keyboardType='numeric'
, karena tidak ada cara untuk mengabaikannya.
Mengganti Tampilan dengan ScrollView bukan solusi yang benar, seolah-olah Anda memiliki beberapa textInput
s atau button
s, mengetuknya saat keyboard menyala hanya akan mengabaikan keyboard.
Cara yang benar adalah dengan merangkum View with TouchableWithoutFeedback
dan callingKeyboard.dismiss()
EDIT: Sekarang Anda dapat menggunakan ScrollView
dengan keyboardShouldPersistTaps='handled'
hanya mengabaikan keyboard ketika ketukan tidak ditangani oleh anak-anak (mis. Mengetuk Input teks atau tombol lainnya)
Jika Anda memiliki
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
Ubah ke
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
atau
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
EDIT: Anda juga dapat membuat Komponen Tingkat Tinggi untuk mengabaikan keyboard.
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)
Cukup gunakan seperti ini
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
CATATAN: accessible={false}
diperlukan untuk membuat formulir input terus dapat diakses melalui VoiceOver. Orang tunanetra akan berterima kasih!