Jika saya mengetuk masukan teks, saya ingin dapat mengetuk tempat lain untuk menghilangkan keyboard lagi (bukan tombol kembali). Saya belum menemukan sedikit pun informasi mengenai hal ini di semua tutorial dan posting blog yang saya baca.
Contoh dasar ini masih tidak berfungsi untuk saya dengan react-asli 0.4.2 di Simulator. Belum dapat mencobanya di iPhone saya.
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
<TextInput
style={{height: 40, borderColor: 'gray', borderWidth: 1}}
onEndEditing={this.clearFocus}
/>
</View>
react-native
TurboFish
sumber
sumber
Jawaban:
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 ataubutton
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
dengankeyboardShouldPersistTaps='handled'
hanya mengabaikan keyboard ketika ketukan tidak ditangani oleh anak-anak (mis. Mengetuk Input teks atau tombol lainnya)Jika Anda memiliki
Ubah ke
atau
EDIT: Anda juga dapat membuat Komponen Tingkat Tinggi untuk mengabaikan keyboard.
Cukup gunakan seperti ini
CATATAN:
accessible={false}
diperlukan untuk membuat formulir input terus dapat diakses melalui VoiceOver. Orang tunanetra akan berterima kasih!sumber
const DismissKeyboardHOC = (Comp) => {
onPress
untukTouchableWithoutFeedback
memecat apa pun yang saya cobaIni baru saja diperbarui dan didokumentasikan ! Tidak ada lagi trik tersembunyi.
https://github.com/facebook/react-native/pull/9925
sumber
gunakan ini untuk pemberhentian khusus
sumber
react-native-search-bar
Gunakan Bereaksi Asli
Keyboard.dismiss()
Jawaban yang Diperbarui
Bereaksi Asli memaparkan
dismiss()
metode statis padaKeyboard
, jadi metode yang diperbarui adalah:Jawaban Asli
Gunakan Bereaksi Asli
dismissKeyboard
Library.Saya memiliki masalah yang sangat mirip dan merasa seperti saya adalah satu-satunya yang tidak mendapatkannya.
ScrollViews
Jika Anda memiliki
ScrollView
, atau apa pun yang mewarisi dari itu sepertiListView
, Anda dapat menambahkan prop yang akan secara otomatis mengabaikan keyboard berdasarkan pers atau peristiwa menyeret.Prop adalah
keyboardDismissMode
dan dapat memiliki nilainone
,interactive
atauon-drag
. Anda dapat membaca lebih lanjut tentang itu di sini .Tampilan Biasa
Jika Anda memiliki sesuatu selain dari
ScrollView
dan Anda ingin menekan untuk menghilangkan keyboard, Anda dapat menggunakan yang sederhanaTouchableWithoutFeedback
danonPress
menggunakan perpustakaan utilitas React NativedismissKeyboard
untuk mengabaikan keyboard untuk Anda.Dalam contoh Anda, Anda dapat melakukan sesuatu seperti ini:
Catatan:
TouchableWithoutFeedback
hanya dapat memiliki satu anak sehingga Anda harus membungkus semuanya di bawah ini dalam satuView
seperti yang ditunjukkan di atas.sumber
dismiss()
metode pada Keyboard, sehingga metode diperbarui:import { Keyboard } from 'react-native'; Keyboard.dismiss()
.Keyboard.dismiss()
ini tidak melakukan apa-apa karena implementasinya tergantung pada fokus pada input, yang tidak lagi saya lakukan.Jawaban sederhananya adalah menggunakan ScrollView daripada View dan atur properti scrollable ke false (mungkin perlu menyesuaikan beberapa style).
Dengan cara ini, keyboard akan hilang saat saya mengetuk di tempat lain. Ini mungkin merupakan masalah dengan reaksi asli, tetapi acara tap sepertinya hanya ditangani dengan ScrollViews yang mengarah pada perilaku yang dijelaskan.
Sunting: Terima kasih kepada jllodra. Harap dicatat bahwa jika Anda mengetuk langsung ke Textinput lain dan kemudian di luar, keyboard tetap tidak akan bersembunyi.
sumber
Anda dapat mengimpor
keyboard
dari yang asli reaksi seperti di bawah ini:dan dalam kode Anda bisa jadi seperti ini:
sumber
static dismiss()
. Saya baru saja menambahkanKeyboard.dismiss()
metode onSubmit saya (di manaonSubmitEditing={() => {this.onSubmit()}})
Saya masih baru dalam Bereaksi, dan mengalami masalah yang sama persis saat membuat aplikasi demo. Jika Anda menggunakan
onStartShouldSetResponder
penyangga (dijelaskan di sini ), Anda bisa menyentuh sentuhan lamaReact.View
. Penasaran ingin mendengar pemikiran React-ers yang lebih berpengalaman tentang strategi ini / jika ada yang lebih baik, tetapi inilah yang berhasil bagi saya:2 hal yang perlu diperhatikan di sini. Pertama, seperti yang dibahas di sini , belum ada cara untuk mengakhiri pengeditan semua subview, jadi kita harus merujuk
TextInput
langsung untuk mengaburkannya. Kedua,onStartShouldSetResponder
dicegat oleh kontrol terjamah lainnya di atasnya. Jadi mengklikTouchableHighlight
dll (termasuk yang lainTextInput
) dalam tampilan wadah tidak akan memicu acara tersebut. Namun, mengklik padaImage
tampilan kontainer masih akan mengabaikan keyboard.sumber
Gunakan
ScrollView
alih-alihView
dan aturkeyboardShouldPersistTaps
atribut ke false.sumber
keyboardShouldPersistTaps
atribut default ke false ketika menggunakan aScrollView
. Saya baru saja memperbarui reaksi asli saya ke versi terbaru dan masalah dengan beralih ke yang keduaTextInput
masih berlanjut. Keyboard kemudian tidak dapat ditolak. Sudahkah Anda menemukan solusi untuk masalah khusus ini?keyboardShouldPersistTaps
harus dilakukan Mengapa ini relevan di sini? Terima kasihJika ada yang membutuhkan contoh yang berfungsi tentang cara mengabaikan input teks multiline di sini ya pergi! Semoga ini bisa membantu beberapa orang di luar sana, dokumen tidak menjelaskan cara untuk mengabaikan input multiline sama sekali, setidaknya tidak ada referensi khusus tentang cara melakukannya. Masih noob untuk benar-benar memposting di sini di stack, jika ada yang berpikir ini harus menjadi referensi ke posting yang sebenarnya cuplikan ini ditulis untuk memberi tahu saya.
sumber
Penggunaan diperbarui
ScrollView
untukReact Native 0.39
Meskipun, masih ada masalah dengan dua
TextInput
kotak. misalnya. Formulir nama pengguna dan kata sandi sekarang akan mengabaikan keyboard saat beralih antar input. Ingin mendapatkan beberapa saran agar keyboard tetap hidup saat beralih di antaraTextInputs
saat menggunakan aScrollView
.sumber
0.40
updatekeyboardShouldPersistTaps
dariboolean
keenum
dengan nilai kemungkinan 'handled` yang kira untuk memperbaiki ini.Ada beberapa cara, jika Anda mengontrol acara seperti
onPress
yang dapat Anda gunakan:jika Anda ingin menutup keyboard saat menggunakan scrolling:
Opsi lainnya adalah ketika pengguna mengklik di luar keyboard:
sumber
Pendekatan No # 2;
Berkat pengguna @ ricardo-stuven untuk menunjukkan ini, ada cara lain yang lebih baik untuk mengabaikan keyboard yang dapat Anda lihat pada contoh di dokumen asli reaksi.
Impor sederhana
Keyboard
dan panggil metode itudismiss()
sumber
Membungkus komponen Anda dalam
TouchableWithoutFeedback
dapat menyebabkan beberapa perilaku gulir aneh dan masalah lainnya. Saya lebih suka untuk membungkus aplikasi saya yang paling atasView
denganonStartShouldSetResponder
properti yang diisi. Ini memungkinkan saya untuk menangani semua sentuhan yang tidak tertangani dan kemudian mengabaikan keyboard. Yang penting, karena fungsi handler mengembalikan false, acara sentuh disebarkan seperti biasa.sumber
Saya baru saja mengujinya menggunakan versi React Native terbaru (0.4.2), dan keyboardnya dihapus ketika Anda mengetuk di tempat lain.
Dan FYI: Anda dapat mengatur fungsi panggilan balik yang akan dieksekusi ketika Anda mengabaikan keyboard dengan menetapkannya ke prop "onEndEditing".
sumber
Jika saya tidak salah, versi terbaru dari React Native telah menyelesaikan masalah ini karena dapat mengabaikan keyboard dengan mengetuk.
sumber
Bagaimana dengan menempatkan komponen yang dapat disentuh di sekitar / di samping
TextInput
?sumber
Bungkus seluruh komponen Anda dengan:
Bekerja untukku
sumber
https://facebook.github.io/react-native/docs/keyboard.html
Menggunakan
untuk menyembunyikan keyboard.
sumber
Modul keyboard digunakan untuk mengontrol acara keyboard.
import { Keyboard } from 'react-native'
Tambahkan kode di bawah ini dalam metode render.
render() { return <TextInput onSubmitEditing={Keyboard.dismiss} />; }
Kamu bisa menggunakan -
sumber
Impor Keyboard pertama
Kemudian di dalam Anda,
TextInput
Anda menambahkanKeyboard.dismiss
keonSubmitEditing
prop. Anda harus memiliki sesuatu yang terlihat seperti ini:sumber
Menggunakan
keyboardShouldPersistTaps
diScrollView
Anda dapat masuk "ditangani", yang berkaitan dengan masalah yang orang katakan datang dengan menggunakan ScrollView. Ini adalah apa yang dikatakan dokumentasi tentang penggunaan 'ditangani':the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor).
Di sinilah itu dirujuk.sumber
react-native-keyboard-aware-scroll-view
).sedang
ScrollView
digunakanIni akan melakukan pekerjaan Anda.
sumber
Ada banyak cara Anda bisa menangani ini, jawaban di atas tidak termasuk
returnType
karena tidak termasuk dalam bahasa asli saat itu.1: Anda dapat menyelesaikannya dengan membungkus komponen Anda di dalam ScrollView, secara default ScrollView menutup keyboard jika kami menekan di suatu tempat. Tetapi jika Anda ingin menggunakan ScrollView tetapi nonaktifkan efek ini. Anda dapat menggunakan pointer pointerEvent untuk scrollView
pointerEvents = 'none'
.2: Jika Anda ingin menutup keyboard dengan menekan tombol, Anda dapat menggunakannya
Keyboard
darireact-native
import { Keyboard } from 'react-native' and inside onPress of that button, you can use
Keyboard.dismiss () '.3: Anda juga dapat menutup keyboard saat mengklik tombol kembali pada keyboard, CATATAN: jika jenis keyboard Anda numerik, Anda tidak akan memiliki kunci kembali. Jadi, Anda dapat mengaktifkannya dengan memberikannya prop, returnKeyType ke
done
. atau Anda dapat menggunakanonSubmitEditing={Keyboard.dismiss}
, Itu dipanggil setiap kali kita menekan tombol kembali. Dan jika Anda ingin mengabaikan keyboard saat kehilangan fokus, Anda dapat menggunakan onBlur prop,onBlur = {Keyboard.dismiss}
sumber
Keyboard.dismiss()
akan melakukannya. Tetapi kadang-kadang itu mungkin kehilangan fokus dan Keyboard tidak akan dapat menemukan referensi. Cara yang paling konsisten untuk dilakukan adalah memasukkanref=_ref
ke Input teks, dan lakukan_ref.blur()
ketika Anda perlu memberhentikan, dan_ref.focus()
ketika Anda perlu membawa kembali keyboard.sumber
coba
keyboard.dismiss()
. Ini berhasil untuk sayasumber
Berikut ini solusi saya untuk Keyboard yang mengabaikan dan menggulir ke mengetuk TextInput (Saya menggunakan ScrollView dengan keyboardDismissMode prop):
pemakaian:
sumber
gunakan paket ini
react-native-keyboard-aware-scroll-view
gunakan komponen itu sebagai komponen root Anda
karena paket ini
react-native-keyboard-aware-scroll-view
juga memiliki scrollView, Anda perlu menambahkan ini ke dalamnya:<KeyboardAwareScrollView keyboardShouldPersistTaps="handled"> <ScrollView keyboardShouldPersistTaps="handled"></ScrollView> </KeyboardAwareScrollView>
sumber