ปัญหาเกี่ยวกับคีย์บอร์ดที่ไม่ได้ยกออกจะรุนแรงขึ้นหากคุณมีkeyboardType='numeric'
เนื่องจากไม่มีวิธีที่จะยกเลิก
การแทนที่มุมมองด้วย ScrollView ไม่ใช่วิธีแก้ไขที่ถูกต้องราวกับว่าคุณมีหลายtextInput
s หรือbutton
s แตะที่พวกเขาในขณะที่แป้นพิมพ์ขึ้นจะยกเลิกคีย์บอร์ดเท่านั้น
วิธีที่ถูกต้องคือการห่อหุ้มมุมมองด้วยTouchableWithoutFeedback
และการโทรKeyboard.dismiss()
แก้ไข: ตอนนี้คุณสามารถใช้ScrollView
กับkeyboardShouldPersistTaps='handled'
เพียงยกเลิกแป้นพิมพ์เมื่อแตะที่ไม่ได้รับการจัดการโดยเด็ก ๆ (เช่นการแตะที่ textInputs อื่น ๆ หรือปุ่ม.)
ถ้าคุณมี
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
เปลี่ยนเป็น
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
หรือ
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
แก้ไข: คุณยังสามารถสร้างองค์ประกอบการสั่งซื้อที่สูงขึ้นเพื่อยกเลิกคีย์บอร์ด
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)
เพียงใช้มันอย่างนี้
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
หมายเหตุ: accessible={false}
จำเป็นต้องใช้เพื่อให้แบบฟอร์มการป้อนข้อมูลยังคงสามารถเข้าถึงได้ผ่าน VoiceOver คนที่มีความบกพร่องทางสายตาจะขอบคุณ!