2017-11-30 2 views
0

나는 항상 머물러야하는 앱이 있습니다. 5 시간 동안 사용하지 않으면 ipad가 종료되거나 잠자기되는 것을 막으려면 매 4 시간마다 홈 화면을 다시로드해야합니다. 그러나 사용자가 키보드를 사용하는 경우 새로 고치기를 원하지 않습니다. 응용 프로그램을 상쾌하게 가지고 있지만 keyboardDidShow 수신기에서 타이머를 멈출 수 없습니다. 나는 다른 방법의 무리를 시도했지만 keyboardDidShow에 타이머를 클리어 할 수없는 생각했다clearTimeout not working Natve

componentDidMount(){ 
this.keyboardDidShowListener = 
    Keyboard.addListener('keyboardDidShow', this._keyboardDidShow); 
this.keyboardDidHideListener = 
    Keyboard.addListener('keyboardDidHide', this._keyboardDidHide); 
this.timeoutHandle = setTimeout(()=>{ 
    this.props.navigation.navigate('Home'); 
},30000); 
} 

_keyboardDidShow() { 
console.log("Keyboard Shown") 
if (this.timeoutHandle) { 
    clearTimeout(this.timeoutHandle); 
    this.timeoutHandle = 0; 
} 
}; 

componentWillUnmount(){ 
this.keyboardDidShowListener.remove(); 
this.keyboardDidHideListener.remove(); 
clearTimeout(this.timeoutHandle); 
} 

_keyboardDidHide() { 
console.log('Keyboard Hidden'); 
} 

: 여기 내 코드입니다. 가능한 경우 도와주세요.

+0

당신은 지방 화살표 기능을 이벤트 리스너에'this'를 결합하거나 사용할 필요가있다. – zvona

답변

0

함수가 잘못된 컨텍스트에서 실행 중입니다.

이 라인 :

this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow); 
this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide); 

필요성이 변경하려면 : 청취자를 참조 할 때

this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow.bind(this)); 
this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide.bind(this)); 
+0

stackoverflow의 역사에서 가장 빠른 대답은? 야, 너 정말 고마워, 날 미치게했다. –