2016-05-13 3 views
5

Po aktualizacji do wersji 0.26.0-rc na iOS tę linię:React Native DeviceEventEmitter keyboardWillShow przestał działać

DeviceEventEmitter.addListener('keyboardWillShow', (e)=>this.updateKeyboardSpace(e)); 

nic nie robi. Gdy klawiatura jest otwarta, metoda updateKeyboardSpace nigdy nie jest wywoływana.

jestem importowania DeviceEventEmitter z tym:

import React from 'react'; 
import {DeviceEventEmitter} from 'react-native'; 

uaktualnieniu z wersji 0.21, to działa dobrze tam.

Odpowiedz

9

It seems like you can not use this kind of event listener any more. Wydaje się, że jest to handled by the Keyboard component now, która korzysta z bibliotek natywnych. Dla iOS it is defined here nazwy zdarzeń wydają się takie same; Nie mogłem jednak znaleźć implementacji Androida. Trzeba by sprawdzić, czy to działa, ale dla iOS to powinno załatwić sprawę:

import {Keyboard} from 'react-native'; 
Keyboard.addListener('keyboardWillShow', (e)=>this.updateKeyboardSpace(e)); 

EDIT:

API wyjaśnione było tylko wewnętrzne. Do normalnego użytkowania można użyć callbacks on the ScrollResponder. You could use eitheronKeyboardWillShow i onKeyboardWillHide. ScrollResponder Mixin jest używany w ScrollView i ListView, więc możesz tam używać tych rekwizytów.

I did a small example on github.

+1

To wygląda super! Postaram się przetestować jak najszybciej! – Cherniv

+0

świetnie, daj mi znać;) –

+1

Nie mogę sprawić, żeby działało, bez względu na to, co robię, generuje błąd: * undefined nie jest obiektem (ocena '_reactNative.Keyboard.addListener') *. Oto pełna wiadomość: https://jsfiddle.net/fh3wq8L1/ – Cherniv

5

na Androidzie, można użyć zamiast tych 2 zdarzeń:

DeviceEventEmitter.addListener('keyboardDidShow', this.keyboardWillShow.bind(this)) 
DeviceEventEmitter.addListener('keyboardDidHide', this.keyboardWillHide.bind(this)) 

testowany na 0.26.0

+0

Dziękuję za odpowiedź, wiem o Androidzie, to nie działa dla mnie na iOs, przepraszam, że nie określiłem mojego pytania – Cherniv

+0

Nie ma problemu, po prostu szukałem odpowiedzi dla Androida, ale nie znalazłem niczego, dopóki nie przeszukałem kodu RN i nie udostępniłem go tutaj, na wypadek, gdyby ktoś go potrzebował – alex88