Если я нажимаю на ввод текста, я хочу иметь возможность нажать где-нибудь еще, чтобы снова закрыть клавиатуру (но не клавишу возврата). Я не нашел ни малейшей информации об этом во всех учебниках и постах блога, которые я прочитал.
Этот базовый пример до сих пор не работает для меня с реакцией родной 0.4.2 в симуляторе. Не могу попробовать это на моем iPhone еще.
<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
источник
источник
Ответы:
Проблема, связанная с тем, что клавиатура не удаляется, становится более серьезной
keyboardType='numeric'
, поскольку у вас нет возможности отменить ее.Замена View на ScrollView не является правильным решением, так как если у вас есть несколько
textInput
s илиbutton
s, нажатие на них, когда клавиатура поднята, приведет к отключению только клавиатуры.Правильный способ заключается в том, чтобы инкапсулировать View
TouchableWithoutFeedback
и вызыватьKeyboard.dismiss()
РЕДАКТИРОВАТЬ: теперь вы можете использовать
ScrollView
с,keyboardShouldPersistTaps='handled'
чтобы уволить клавиатуру только тогда, когда касание не обрабатывается дочерними (то есть, нажав на другие текстовые входы или кнопки)Если у тебя есть
Измените это на
или
РЕДАКТИРОВАТЬ: Вы также можете создать компонент высшего порядка, чтобы закрыть клавиатуру.
Просто используйте это так
ПРИМЕЧАНИЕ.
accessible={false}
Требуется, чтобы форма ввода оставалась доступной через VoiceOver. Люди с нарушениями зрения будут вам благодарны!источник
const DismissKeyboardHOC = (Comp) => {
onPress
дляTouchableWithoutFeedback
стрельбы, независимо от того, что я пытаюсьЭто только что было обновлено и задокументировано ! Нет больше скрытых трюков.
https://github.com/facebook/react-native/pull/9925
источник
используйте это для таможенного увольнения
источник
react-native-search-bar
Используйте React Native's
Keyboard.dismiss()
Обновленный ответ
React Native предоставил статический
dismiss()
метод дляKeyboard
, поэтому обновленный метод:Оригинальный ответ
Используйте React Native's
dismissKeyboard
Library.У меня была очень похожая проблема, и я чувствовал, что я единственный, кто ее не получил.
ScrollViews
Если у вас есть
ScrollView
или что-то, что унаследовано от него, напримерListView
, вы можете добавить опору, которая автоматически отклонит клавиатуру на основе событий нажатия или перетаскивания.Опора есть
keyboardDismissMode
и может иметь значениеnone
,interactive
илиon-drag
. Вы можете прочитать больше об этом здесь .Регулярные просмотры
Если у вас есть что-то отличное от a,
ScrollView
и вы хотите, чтобы какие-либо нажатия отклонили клавиатуру, вы можете использовать простую утилитуTouchableWithoutFeedback
иonPress
использовать служебную библиотеку React Native,dismissKeyboard
чтобы отклонить клавиатуру за вас.В вашем примере вы можете сделать что-то вроде этого:
Примечание:
TouchableWithoutFeedback
может иметь только одного ребенка, поэтому вам нужно обернуть все под ним в один,View
как показано выше.источник
dismiss()
метода на клавиатуре, поэтому обновленный метод:import { Keyboard } from 'react-native'; Keyboard.dismiss()
.Keyboard.dismiss()
ничего не делает, поскольку его реализация зависит от того, фокусируется ли он на вводе, которым я больше не являюсь.Простой ответ - использовать ScrollView вместо View и установить для свойства scrollable значение false (хотя, возможно, потребуется изменить некоторые стили).
Таким образом, клавиатура отключается, как только я нажимаю куда-то еще. Это может быть проблемой с реакцией-нативной, но события касания, кажется, обрабатываются только с ScrollViews, что приводит к описанному поведению.
Редактировать: благодаря jllodra. Обратите внимание, что если вы нажмете непосредственно на другой ввод текста, а затем снаружи, клавиатура по-прежнему не будет скрыта.
источник
Вы можете импортировать
keyboard
из реактивной системы, как показано ниже:и в вашем коде может быть что-то вроде этого:
источник
static dismiss()
. Я только добавилKeyboard.dismiss()
к своему методу onSubmit (гдеonSubmitEditing={() => {this.onSubmit()}})
Я новичок в React, и столкнулся с той же проблемой при создании демонстрационного приложения. Если вы используете
onStartShouldSetResponder
опору (описанную здесь ), вы можете взять прикосновения к старомуReact.View
. Любопытно услышать мнение более опытных Реакторов об этой стратегии / если есть лучшая, но вот что сработало для меня:2 вещи, чтобы отметить здесь. Во- первых, как описано здесь , есть еще не способ закончить редактирование всех подвидов, поэтому мы должны обратиться к
TextInput
непосредственно размывать его. Во-вторых,onStartShouldSetResponder
он перехватывается другими сенсорными элементами управления поверх него. Таким образом, нажатие на иTouchableHighlight
т. Д. (Включая другоеTextInput
) в представлении контейнера не вызовет событие. Тем не менее, нажатие наImage
внутри контейнера будет по-прежнему отклонять клавиатуру.источник
Используйте
ScrollView
вместоView
и установите дляkeyboardShouldPersistTaps
атрибута значение false.источник
keyboardShouldPersistTaps
атрибут по умолчанию имеет значение false при использованииScrollView
. Я только что обновил свою реактивную версию до последней версии, и проблема с переключением на секундуTextInput
все еще сохраняется. Клавиатура тогда не запрещена. Вы нашли решение этой конкретной проблемы?keyboardShouldPersistTaps
? Почему это актуально здесь? СпасибоЕсли кому-то нужен рабочий пример того, как отклонить многострочный ввод текста, то вы идете! Надеюсь, что это поможет некоторым людям, в документах вообще не описывается способ отклонения многострочного ввода, по крайней мере, не было конкретной ссылки на то, как это сделать. Тем не менее, новичок для фактической публикации здесь в стеке, если кто-то думает, что это должна быть ссылка на фактическую публикацию, для которой был написан этот фрагмент, дайте мне знать.
источник
Обновлено использование
ScrollView
дляReact Native 0.39
Хотя проблема с двумя
TextInput
ящиками остается . например. Форма имени пользователя и пароля теперь будет отклонять клавиатуру при переключении между входами. Хотелось бы получить несколько советов, чтобы сохранить живую клавиатуру при переключении междуTextInputs
при использованииScrollView
.источник
0.40
обновленияkeyboardShouldPersistTaps
от aboolean
кenum
возможному значению 'handled', которое должно исправить это.Есть несколько способов, если вы управляете событием так, как
onPress
можете использовать:если вы хотите закрыть клавиатуру при использовании прокрутки:
Еще вариант, когда пользователь нажимает за пределами клавиатуры:
источник
Подход № 2;
Спасибо пользователю @ ricardo-stuven за указание на это, есть еще один лучший способ отклонить клавиатуру, который вы можете увидеть в примере в реагирующих нативных документах.
Простой импорт
Keyboard
и вызов методаdismiss()
источник
Оборачивание ваших компонентов в
TouchableWithoutFeedback
может вызвать странное поведение прокрутки и другие проблемы. Я предпочитаю оборачивать своеView
самое верхнее приложение вonStartShouldSetResponder
заполненное свойство. Это позволит мне обработать все необработанные касания и затем отклонить клавиатуру. Важно отметить, что поскольку функция-обработчик возвращает false, событие касания распространяется как обычно.источник
Я только что проверил это, используя последнюю версию React Native (0.4.2), и клавиатура отключается при нажатии в другом месте.
И к вашему сведению: вы можете настроить функцию обратного вызова, которая будет выполняться при отклонении клавиатуры, назначив ее для «onEndEditing».
источник
Если я не ошибаюсь, то последняя версия React Native решила эту проблему, заключающуюся в том, чтобы отмахнуться от клавиатуры, нажав.
источник
Как насчет размещения сенсорного компонента вокруг / рядом с
TextInput
?источник
Оберните весь ваш компонент с:
Работал для меня
источник
https://facebook.github.io/react-native/docs/keyboard.html
использование
спрятать клавиатуру
источник
Модуль клавиатуры используется для управления событиями клавиатуры.
import { Keyboard } from 'react-native'
Добавьте ниже код в методе рендеринга.
render() { return <TextInput onSubmitEditing={Keyboard.dismiss} />; }
Ты можешь использовать -
источник
Первая импортная клавиатура
Затем внутри
TextInput
вы добавляетеKeyboard.dismiss
вonSubmitEditing
опору. У вас должно быть что-то похожее на это:источник
Используя
keyboardShouldPersistTaps
в,ScrollView
вы можете передать «обработано», которое решает проблемы, которые, по словам людей, возникают при использовании ScrollView. Это то, что в документации говорится об использовании «handled»:the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor).
вот где на него ссылаются.источник
react-native-keyboard-aware-scroll-view
).в
ScrollView
использованииЭто сделает вашу работу.
источник
Есть много способов, которыми вы могли бы справиться с этим, ответы выше не включают
returnType
в себя, так как он не был включен в реакцию на этот раз.1: Вы можете решить эту проблему, обернув свои компоненты внутри ScrollView, по умолчанию ScrollView закрывает клавиатуру, если мы что-то нажимаем. Но если вы хотите использовать ScrollView, но отключите этот эффект. Вы можете использовать pointerEvent prop для scrollView
pointerEvents = 'none'
.2: Если вы хотите закрыть клавиатуру нажатием кнопки, вы можете просто использовать
Keyboard
сreact-native
import { Keyboard } from 'react-native' and inside onPress of that button, you can use
Keyboard.dismiss ()».3: Вы также можете закрыть клавиатуру, когда нажмете клавишу возврата на клавиатуре. ПРИМЕЧАНИЕ: если у вас тип клавиатуры цифровой, у вас не будет клавиши возврата. Таким образом, вы можете включить его, предоставив ему команду returnKeyType
done
. или вы можете использоватьonSubmitEditing={Keyboard.dismiss}
, он вызывается всякий раз, когда мы нажимаем клавишу возврата. И если вы хотите отклонить клавиатуру при потере фокуса, вы можете использовать onBlur prop,onBlur = {Keyboard.dismiss}
источник
Keyboard.dismiss()
сделаю это. Но иногда он может потерять фокус, и клавиатура не сможет найти ссылку. Наиболее последовательный способ сделать это - поместитьref=_ref
в textInput, и делать,_ref.blur()
когда вам нужно уволить, и_ref.focus()
когда вам нужно вернуть клавиатуру.источник
попробуй
keyboard.dismiss()
. У меня сработалоисточник
Вот мое решение для отклонения клавиатуры и прокрутки к нажатой TextInput (я использую ScrollView с пропуском клавиатурыDismissMode):
Применение:
источник
использовать этот пакет
react-native-keyboard-aware-scroll-view
использовать этот компонент в качестве корневого компонента
так как этот пакет
react-native-keyboard-aware-scroll-view
также имеет scrollView, вам нужно добавить это к нему:<KeyboardAwareScrollView keyboardShouldPersistTaps="handled"> <ScrollView keyboardShouldPersistTaps="handled"></ScrollView> </KeyboardAwareScrollView>
источник