Sembunyikan keyboard di reaksi-asli

448

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>
TurboFish
sumber
Jawaban yang benar harus dari Eric Kim di bawah ini. Jawaban ScrollView (atur scrollable ke false) tidak ideal, jika Anda memiliki beberapa input teks, itu tidak memungkinkan Anda melompat dari input teks ke input teks tanpa keyboard dibubarkan.
hippofluff
2
Bagi mereka yang menginginkan solusi untuk seluruh aplikasi, lihat jawaban @ Scottmas di bawah ini (tautan: stackoverflow.com/a/49825223/1138273 )
Hamed

Jawaban:

563

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 textInputs atau buttons, mengetuknya saat keyboard menyala hanya akan mengabaikan keyboard.

Cara yang benar adalah dengan merangkum View with TouchableWithoutFeedbackdan callingKeyboard.dismiss()

EDIT: Sekarang Anda dapat menggunakan ScrollViewdengan 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!

Eric Kim
sumber
28
Ini bagus, satu-satunya komentar yang saya miliki adalah bahwa Anda bisa menggunakan api Keyboard resmi di RN, dan disebut Keyboard.dismiss () alih-alih memanggil beberapa utilitas internal RN dismissKeyboard (). Namun keduanya bekerja dengan baik saat ini.
Pavle Lekic
@PavleLekic Maaf atas keterlambatan ini, saya memperbarui jawabannya bersama dengan metode HOC
Eric Kim
3
Ini sangat bagus. Saya harus mengubah sedikit sintaks untuk definisi fungsi panah, untuk menghapus kesalahan token yang tidak terduga di RN: const DismissKeyboardHOC = (Comp) => {
jwinn
2
Saya tidak bisa mendapatkan onPressuntuk TouchableWithoutFeedbackmemecat apa pun yang saya coba
Brad Ryan
1
Mengapa membuat HoC dan hanya menambahkan ini di root pohon aplikasi Anda /
Dimitri Kopriwa
248

Ini baru saja diperbarui dan didokumentasikan ! Tidak ada lagi trik tersembunyi.

import { Keyboard } from 'react-native'

// Hide that keyboard!
Keyboard.dismiss()

https://github.com/facebook/react-native/pull/9925

Gant Laborde
sumber
4
Terima kasih telah menambahkan ini. Saya harap jawaban Anda menggelembung ke atas. Saya hampir melewatkannya dan menggunakan solusi usang.
anjing gembala
2
Pinging @MrMuetze untuk mengubah ini sebagai jawaban yang benar
jehna1
8
Ini seharusnya tidak dipilih sebagai jawaban terbaik. Pertanyaannya adalah bagaimana cara mengabaikan keyboard ketika mengetuk di luar itu. Jawaban ini hanya menyediakan API untuk melakukannya, sementara jawaban terbaik yang sebenarnya menyediakan implementasi yang bisa diterapkan.
jskidd3
Anda dapat menggunakan perpustakaan berikutnya: KeyboardAwareScrollView
Alejandro Gonzalez
97

gunakan ini untuk pemberhentian khusus

var dismissKeyboard = require('dismissKeyboard');

var TestView = React.createClass({
    render: function(){
        return (
            <TouchableWithoutFeedback 
                onPress={dismissKeyboard}>
                <View />
            </TouchableWithoutFeedback>
        )
    }
})
syarul
sumber
Ini tidak didokumentasikan, tetapi sampel dalam repo github asli-reaksi memang menggunakannya beberapa kali.
syarul
7
Menarik, bagi mereka yang penasaran dari mana asalnya, ini adalah perpustakaan Utility di React Native. Inilah sumbernya: github.com/facebook/react-native/blob/master/Libraries/…
Joshua Pinter
1
Untuk beberapa alasan itu tidak berhasil, ketika saya mencobareact-native-search-bar
Peter G.
Ini sama persis dengan Keyboard.dismiss, yang lebih disukai karena didokumentasikan. github.com/facebook/react-native/blob/…
Ricardo Stuven
88

Gunakan Bereaksi Asli Keyboard.dismiss()

Jawaban yang Diperbarui

Bereaksi Asli memaparkan dismiss()metode statis pada Keyboard, jadi metode yang diperbarui adalah:

import { Keyboard } from 'react-native'; 

Keyboard.dismiss()

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 seperti ListView, Anda dapat menambahkan prop yang akan secara otomatis mengabaikan keyboard berdasarkan pers atau peristiwa menyeret.

Prop adalah keyboardDismissModedan dapat memiliki nilai none, interactiveatau on-drag. Anda dapat membaca lebih lanjut tentang itu di sini .

Tampilan Biasa

Jika Anda memiliki sesuatu selain dari ScrollViewdan Anda ingin menekan untuk menghilangkan keyboard, Anda dapat menggunakan yang sederhana TouchableWithoutFeedbackdan onPressmenggunakan perpustakaan utilitas React Native dismissKeyboarduntuk mengabaikan keyboard untuk Anda.

Dalam contoh Anda, Anda dapat melakukan sesuatu seperti ini:

var DismissKeyboard = require('dismissKeyboard'); // Require React Native's utility library.

// Wrap your view with a TouchableWithoutFeedback component like so.

<View style={styles.container}>

  <TouchableWithoutFeedback onPress={ () => { DismissKeyboard() } }>

    <View>

      <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}} />

    </View>

  </TouchableWithoutFeedback>

</View>

Catatan: TouchableWithoutFeedbackhanya dapat memiliki satu anak sehingga Anda harus membungkus semuanya di bawah ini dalam satu Viewseperti yang ditunjukkan di atas.

Joshua Pinter
sumber
4
Bereaksi asli terkena statis dismiss()metode pada Keyboard, sehingga metode diperbarui: import { Keyboard } from 'react-native'; Keyboard.dismiss().
Joshua Pinter
1
Saya punya keyboard yang berkeliaran karena saya melakukan reload sambil fokus pada kolom input dalam hal Keyboard.dismiss()ini tidak melakukan apa-apa karena implementasinya tergantung pada fokus pada input, yang tidak lagi saya lakukan.
pstanton
@ pstanton Apa yang harus Anda lakukan untuk mengabaikan keyboard?
Joshua Pinter
Tidak mungkin saya bisa menemukan, jadi saya paksa tutup!
pstanton
41

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.

TurboFish
sumber
1
Ini bekerja dengan scrollview tetapi masih ada beberapa kasus yang saya alami di mana saya dapat mengklik tombol untuk mengubah tampilan menggunakan navigator dan keyboard masih menempel di bagian bawah dan harus secara manual mengklik tombol kembali untuk menutupnya :(
Piyush Chauhan
1
Keyboard bersembunyi ketika Anda mengetuk di luar TextInput, tetapi jika (alih-alih mengetuk di luar) Anda mengetuk ke dalam TextInput lain, dan akhirnya mengetuk di luar, keyboard tidak bersembunyi. Diuji pada 0.6.0.
jllodra
Saya melihat perilaku yang berbeda sekarang. Mengetuk di luar TextInput menyembunyikan keyboard, bahkan jika saya mengetuk langsung ke TextInput lain - yang merupakan masalah karena Anda harus mengetuk dua kali pada TextInput lain untuk dapat mengetik di dalamnya! Mendesah. (dengan RN 0,19)
Lane Rettig
1
Anda dapat mengatur scrollable menjadi true dan menggunakan keyboardShouldPersistTaps = {'ditangani'} dan keyboardDismissMode = {'on-drag'} untuk mencapai efek yang sama
Eric Wiener
hanya scrollview yang berfungsi untuk saya, saya tidak tahu mengapa, jawaban yang diterima ketika saya memasukkan nomor keyboard ditolak
Yvon Huynh
33

Anda dapat mengimpor keyboard dari yang asli reaksi seperti di bawah ini:

import { Keyboard } from 'react-native';

dan dalam kode Anda bisa jadi seperti ini:

render() {
    return (
      <TextInput
        onSubmit={Keyboard.dismiss}
      />
    );
  }

pemberhentian statis ()

Menonaktifkan keyboard aktif dan menghapus fokus.

Alireza
sumber
Saya tidak perlu static dismiss(). Saya baru saja menambahkan Keyboard.dismiss()metode onSubmit saya (di manaonSubmitEditing={() => {this.onSubmit()}})
SherylHohman
30

Saya masih baru dalam Bereaksi, dan mengalami masalah yang sama persis saat membuat aplikasi demo. Jika Anda menggunakan onStartShouldSetResponderpenyangga (dijelaskan di sini ), Anda bisa menyentuh sentuhan lama React.View. Penasaran ingin mendengar pemikiran React-ers yang lebih berpengalaman tentang strategi ini / jika ada yang lebih baik, tetapi inilah yang berhasil bagi saya:

containerTouched(event) {
  this.refs.textInput.blur();
  return false;
}

render() {
  <View onStartShouldSetResponder={this.containerTouched.bind(this)}>
    <TextInput ref='textInput' />
  </View>
}

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 TextInputlangsung untuk mengaburkannya. Kedua, onStartShouldSetResponderdicegat oleh kontrol terjamah lainnya di atasnya. Jadi mengklik TouchableHighlightdll (termasuk yang lain TextInput) dalam tampilan wadah tidak akan memicu acara tersebut. Namun, mengklik pada Imagetampilan kontainer masih akan mengabaikan keyboard.

hunteros
sumber
Ini pasti berhasil. Tetapi seperti yang Anda katakan, saya juga ingin tahu apakah ini cara yang benar. Semoga mereka segera mengatasinya ( github.com/facebook/react-native/issues/113 )
mutp
Hebat ini bekerja untuk saya. Tampilan gulir saya tidak berfungsi dengan metode yang dapat disentuh! Terima kasih!
James Trickey
24

Gunakan ScrollViewalih-alih Viewdan atur keyboardShouldPersistTapsatribut ke false.

<ScrollView style={styles.container} keyboardShouldPersistTaps={false}>
    <TextInput
        placeholder="Post Title"
        onChange={(event) => this.updateTitle(event.nativeEvent.text)}
        style={styles.default}/>
 </ScrollView>
Tyler McGinnis
sumber
Menurut dokumentasi, keyboardShouldPersistTapsatribut default ke false ketika menggunakan a ScrollView. Saya baru saja memperbarui reaksi asli saya ke versi terbaru dan masalah dengan beralih ke yang kedua TextInputmasih berlanjut. Keyboard kemudian tidak dapat ditolak. Sudahkah Anda menemukan solusi untuk masalah khusus ini?
TurboFish
1
Dokumen tidak benar, tetapi sekarang telah diperbarui, lihat PR ini: github.com/facebook/react-native/issues/2150
Ryan McDermott
Apa yang keyboardShouldPersistTapsharus dilakukan Mengapa ini relevan di sini? Terima kasih
Lane Rettig
1
Peringatan: 'keyboardShouldPersistTaps = {false}' sudah usang. Gunakan 'keyboardShouldPersistTaps = "tidak pernah"
Milan Rakos
13

Jika 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.

import React, { Component } from 'react'
import {
  Keyboard,
  TextInput,
  TouchableOpacity,
  View,
  KeyboardAvoidingView,
} from 'react-native'

class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      behavior: 'position',
    }
    this._keyboardDismiss = this._keyboardDismiss.bind(this)
  }

  componentWillMount() {
    this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
  }

  componentWillUnmount() {
    this.keyboardDidHideListener.remove()
  }

  _keyboardDidHide() {
    Keyboard.dismiss()
  }

  render() {
    return (
      <KeyboardAvoidingView
        style={{ flex: 1 }}
        behavior={this.state.behavior}
      >
        <TouchableOpacity onPress={this._keyboardDidHide}>
          <View>
            <TextInput
              style={{
                color: '#000000',
                paddingLeft: 15,
                paddingTop: 10,
                fontSize: 18,
              }}
              multiline={true}
              textStyle={{ fontSize: '20', fontFamily: 'Montserrat-Medium' }}
              placeholder="Share your Success..."
              value={this.state.text}
              underlineColorAndroid="transparent"
              returnKeyType={'default'}
            />
          </View>
        </TouchableOpacity>
      </KeyboardAvoidingView>
    )
  }
}
austin reynolds
sumber
11

Penggunaan diperbarui ScrollViewuntukReact Native 0.39

<ScrollView scrollEnabled={false} contentContainerStyle={{flex: 1}} />

Meskipun, masih ada masalah dengan dua TextInputkotak. 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 antara TextInputssaat menggunakan a ScrollView.

Anshul Koka
sumber
3
Tampaknya 0.40update keyboardShouldPersistTapsdari booleanke enumdengan nilai kemungkinan 'handled` yang kira untuk memperbaiki ini.
Anshul Koka
11

Ada beberapa cara, jika Anda mengontrol acara seperti onPressyang dapat Anda gunakan:

import { Keyboard } from 'react-native'

onClickFunction = () => {
     Keyboard.dismiss()
}

jika Anda ingin menutup keyboard saat menggunakan scrolling:

<ScrollView keyboardDismissMode={'on-drag'}>
     //content
</ScrollView>

Opsi lainnya adalah ketika pengguna mengklik di luar keyboard:

<KeyboardAvoidingView behavior='padding' style={{ flex: 1}}>
    //inputs and other content
</KeyboardAvoidingView>
Idan
sumber
1
Guys, pertanyaannya masih aktual tetapi pertanyaannya adalah 4 tahun (akhir 2019 sekarang). RN sekarang sangat sederhana dan mudah digunakan. Kami harus meninjau semua kemampuan dengan bantuan kami dapat mencapai solusi untuk pertanyaan ini. Biarkan terunggah komentar ini!
Tautkan
@ Link Hai terima kasih! Saya sangat setuju
Idan
10
const dismissKeyboard = require('dismissKeyboard');
dismissKeyboard(); //dismisses it

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 Keyboarddan panggil metode itudismiss()

Adeel Imran
sumber
1
Ini sama persis dengan Keyboard.dismiss, yang lebih disukai karena didokumentasikan. github.com/facebook/react-native/blob/…
Ricardo Stuven
Pada saat saya memberikan jawaban ini, ini tidak didokumentasikan. Terima kasih telah menyebutkannya. Saya akan memperbarui jawaban saya.
Adeel Imran
10

Membungkus komponen Anda dalam TouchableWithoutFeedbackdapat menyebabkan beberapa perilaku gulir aneh dan masalah lainnya. Saya lebih suka untuk membungkus aplikasi saya yang paling atas Viewdengan onStartShouldSetResponderproperti 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.

 handleUnhandledTouches(){
   Keyboard.dismiss
   return false;
 }

 render(){
    <View style={{ flex: 1 }} onStartShouldSetResponder={this.handleUnhandledTouches}>
       <MyApp>
    </View>
  }
Scottmas
sumber
Terima kasih atas jawaban Anda @Scottmas. Saya akhirnya menggunakannya alih-alih TouchableWithoutFeedback, karena komentar "perilaku gulir aneh dan masalah lainnya". Tetapi jika saya tidak secara membuta mempercayai kata-kata Anda, dapatkah Anda menguraikan komentar Anda? :)
kuhr
8

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".

Jonathan Huang
sumber
Saya sedang men-debug panggilan balik "onEndEditing", tetapi tidak pernah terpicu sebelumnya; Saya akan membahas ini dengan versi yang lebih baru dari reaksi asli, terima kasih atas saran Anda
TurboFish
7

Jika saya tidak salah, versi terbaru dari React Native telah menyelesaikan masalah ini karena dapat mengabaikan keyboard dengan mengetuk.

christopherdro
sumber
4
Apakah Anda dapat menunjukkan bagian mana dari kode / dokumen mereka yang melakukan itu? Saya mengalami masalah yang sama, dan saya sangat menghargai itu menunjukkan saya arah :)
Okazaki Miyama Yuta
Dikonfirmasi bahwa ini masih menjadi masalah pada RN 0,19 (terbaru).
Lane Rettig
Masih masalah dengan RN 0,28
hippofluff
7

Bagaimana dengan menempatkan komponen yang dapat disentuh di sekitar / di samping TextInput?

var INPUTREF = 'MyTextInput';

class TestKb extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <View style={{ flex: 1, flexDirection: 'column', backgroundColor: 'blue' }}>
                <View>
                    <TextInput ref={'MyTextInput'}
                        style={{
                            height: 40,
                            borderWidth: 1,
                            backgroundColor: 'grey'
                        }} ></TextInput>
                </View>
                <TouchableWithoutFeedback onPress={() => this.refs[INPUTREF].blur()}>
                    <View 
                        style={{ 
                            flex: 1, 
                            flexDirection: 'column', 
                            backgroundColor: 'green' 
                        }} 
                    />
                </TouchableWithoutFeedback>
            </View>
        )
    }
}
kebosanan
sumber
6

Bungkus seluruh komponen Anda dengan:

import { TouchableWithoutFeedback, Keyboard } from 'react-native'

<TouchableWithoutFeedback onPress={() => Keyboard.dismiss()}>
...
</TouchableWithoutFeedback>

Bekerja untukku

Arthur Mastropietro
sumber
4

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 -

Keyboard.dismiss()

static dismiss () Membubarkan keyboard aktif dan menghapus fokus sesuai reaksi dokumen asli.

sharma abhinandan
sumber
3

Impor Keyboard pertama

import { Keyboard } from 'react-native'

Kemudian di dalam Anda, TextInputAnda menambahkan Keyboard.dismisske onSubmitEditingprop. Anda harus memiliki sesuatu yang terlihat seperti ini:

render(){
  return(
    <View>
      <TextInput 
        onSubmitEditing={Keyboard.dismiss}
       />
    </View>
  )  
}
Nagendra kr.
sumber
1
Lebih banyak konteks akan menyenangkan.
colidyre
2

Menggunakan keyboardShouldPersistTapsdi ScrollViewAnda 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.

Samuel
sumber
Ini berhasil untuk saya! (Namun saya harus menambahkannya di perpustakaan pihak ke-3 saya react-native-keyboard-aware-scroll-view).
Nick Grealy
1

sedang ScrollViewdigunakan

keyboardShouldPersistTaps="handled" 

Ini akan melakukan pekerjaan Anda.

gamingumar
sumber
1

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 Keyboarddarireact-native

import { Keyboard } from 'react-native' and inside onPress of that button, you can useKeyboard.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 menggunakan onSubmitEditing={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}

Sarmad Shah
sumber
0

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 memasukkan ref=_refke Input teks, dan lakukan _ref.blur()ketika Anda perlu memberhentikan, dan _ref.focus()ketika Anda perlu membawa kembali keyboard.

Bruce Xinda Lin
sumber
0

coba keyboard.dismiss(). Ini berhasil untuk saya

Amoli
sumber
0

Berikut ini solusi saya untuk Keyboard yang mengabaikan dan menggulir ke mengetuk TextInput (Saya menggunakan ScrollView dengan keyboardDismissMode prop):

import React from 'react';
import {
  Platform,
  KeyboardAvoidingView,
  ScrollView
} from 'react-native';

const DismissKeyboard = ({ children }) => {
  const isAndroid = Platform.OS === 'android';
  const behavior = isAndroid ? false : 'padding';

  return (
    <KeyboardAvoidingView
      enabled
      behavior={ behavior }
      style={{ flex: 1}}
    >
      <ScrollView
        keyboardShouldPersistTaps={'always'}
        keyboardDismissMode={'on-drag'}
      >
        { children }
      </ScrollView>
    </KeyboardAvoidingView>
  );
};

export default DismissKeyboard;

pemakaian:

render(){
   return(
     <DismissKeyboard>
       <TextInput
        style={{height: 40, borderColor: 'gray', borderWidth: 1}}
        onChangeText={(text) => this.setState({text})}
        value={this.state.text}
      />
     </DismissKeyboard>
   );
}

Artem Shevtsov
sumber
0

gunakan paket ini react-native-keyboard-aware-scroll-view

gunakan komponen itu sebagai komponen root Anda

karena paket ini react-native-keyboard-aware-scroll-viewjuga memiliki scrollView, Anda perlu menambahkan ini ke dalamnya:

<KeyboardAwareScrollView keyboardShouldPersistTaps="handled"> <ScrollView keyboardShouldPersistTaps="handled"></ScrollView> </KeyboardAwareScrollView>

Cyrus Zei
sumber