【发布时间】:2019-03-15 19:00:53
【问题描述】:
我在我的项目中实现了 PanResponder,但它仅在我触摸不可触摸元素时才有效。当我触摸 TouchableOpacity 等可触摸元素时,PanReponder 没有响应。但是当我在 TouchableOpacity 上移动手指时,PanResponder 会响应。
同样的事情也发生在 Button 身上
请告诉我可能是什么问题。
博览链接:https://snack.expo.io/SyYrtq87W
import React, { Component } from 'react';
import { Button, PanResponder, View, StyleSheet,TouchableOpacity } from 'react-native';
import { Constants } from 'expo';
export default class App extends Component {
state = {
show : false
};
_panResponder = {};
componentWillMount() {
this._panResponder = PanResponder.create({
onStartShouldSetPanResponder: () => {
alert('clicked')
console.log('clicked')
return true
},
onMoveShouldSetPanResponder: () => {
alert('moved')
console.log('moved')
return true
},
onStartShouldSetPanResponderCapture: () => false,
onMoveShouldSetPanResponderCapture: () => false,
onPanResponderTerminationRequest: () => true,
onShouldBlockNativeResponder: () => false,
});
}
render() {
return (
<View
style={styles.container}
collapsable={false}
{...this._panResponder.panHandlers}>
{/*********************PanResponder does not respond***************************/}
<TouchableOpacity>
<View style={{width:200, height:200,backgroundColor:'red'}}>
</View>
</TouchableOpacity>
<Button
title="Here is a button for some reason"
onPress={() => {}}
/>
{/*****************************************************************************/}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#ecf0f1',
}
});
【问题讨论】:
-
您分享的 github 问题与您所说的相反,或者您确实需要重新表述您的问题。
When I touch touchable elements like TouchableOpacity, it does not responds- 谁不回应?可触摸还是响应者? -
对不起。是 PanResponder 没有响应。 Touchable 工作正常。
-
在您提供的链接中,问题是 Touchables 没有响应,所以这是一个不同的问题。我认为响应器对您来说工作正常,如果您希望可触摸不响应,您可以禁用它们的指针事件。
-
响应者没有正确响应。如果我按下 TouchableOpacity(应用程序中的红色框),则不会弹出警报。如果我稍微拖动手指(有时甚至在单击时),就会弹出红色框警报,并显示消息“已移动”,指示手指已在其上移动。我想要的是,如果我点击那个红框警报应该弹出消息“点击”
-
哦,如果是这样的话,您添加的链接就像在 iOS 上对我一样。你是在什么平台上遇到这个问题的?
标签: react-native