图标的 TouchableOpacity 和 onPress

Posted

技术标签:

【中文标题】图标的 TouchableOpacity 和 onPress【英文标题】:TouchableOpacity and onPress for Icons 【发布时间】:2020-11-23 09:10:48 【问题描述】:

我正在尝试将 onPress 用于图标。为此,我想到了使用 TouchableOpacity,但是当我单击图标时没有任何反应。我没有看到任何控制台日志。

我也尝试将图标包装在另一个视图中,但这也不起作用。

const criteriaList = [
    "Nur Frauen",
    "Freunde Zweiten Grades",
]


export const FilterCriteriaList: React.FunctionComponent = () => 
  return (
      <View style=styles.container>
          <View style=styles.horizontalLine />
          criteriaList.map((item: string) => (
        <View key=item>
            <View style=styles.criteriaRow>
                <TouchableOpacity style=styles.iconContainer onPress=()=>console.log('dhjksds')>
            <Icon style=styles.icon name="circle-thin" color="#31C283" size=moderateScale(20)/>
            </TouchableOpacity>
              <Text style=styles.text>item</Text>
              </View>
              <View style=styles.horizontalLine />
         </View>
      ))
      </View>
  );
;

const styles = StyleSheet.create(
  container: 
    flex: 1,
  ,
  criteriaRow: 
      flexDirection: 'row',
      paddingLeft: moderateScale(25),
  ,
  horizontalLine: 
    width: '100%',
    height: moderateScale(1),
    backgroundColor: '#E0E0E0',
  ,
  text: 
    paddingLeft: moderateScale(15),
    paddingBottom: moderateScale(15),
    marginBottom: moderateScale(15),
    paddingTop: moderateScale(15),
  ,
  icon: 
      paddingTop: moderateScale(12),
  ,
  iconContainer: 
      backgroundColor: 'red',
  
);

看起来像这样,我点击了圆圈图标的中间。

我还能尝试什么?

【问题讨论】:

【参考方案1】:

我认为图标正在覆盖可触摸组件。可触摸的不透明度没有提供高度和宽度。所以它隐藏在图标后面。在 TouchableOpacity 的样式中提供一些高度和宽度。它应该可以工作。

在调试时为 TouchableOpacity 添加一些背景颜色,以便您可以清楚地看到 TouchableOpacity 布局。

【讨论】:

添加背景色是为了调试。建议的解决方法是为可触摸的不透明度添加一些宽度和高度。 我刚看到背景颜色图片。您是否已将其添加到 Touchable Opacity 中?您能否更新您的代码以获得清晰的图片? 看起来很奇怪。有些 TouchableOpacity 隐藏在某些视图后面。尝试将 zIndex 添加到组件中。 iconContainer: backgroundColor: 'red', zIndex: 1 你能说你从哪里导入 touchableopacity 吗? snack.expo.io/dpmUu3!s4 制作了一款样式完全相同的小吃。奇怪的是,它在这里有效,但在我的模拟器中无效。任何想法为什么会这样?我什至尝试将 touchableOpacity 添加到 Text 和整行。尽管如此,我还是无法点击它们。 @DhevendhiranM【参考方案2】:

试试这个......为我工作......我刚刚将控制台更改为警报和一些 css

return (
    <View style=styles.container>
      <View style=styles.horizontalLine />
      criteriaList.map((item, index) => (
        <View key=index>
          <View style=styles.criteriaRow>
            <TouchableOpacity
              style=styles.iconContainer
              onPress=() => alert("ff")
            >
              <Icon
            style=styles.icon
            name="circle-thin"
            color="#31C283"
            size=20
          />
            </TouchableOpacity>
            <Text style=styles.text>item</Text>
          </View>
          <View style=styles.horizontalLine />
        </View>
      ))
    </View>
  );


const styles = StyleSheet.create(
  container: 
    flex: 1,
  ,
  criteriaRow: 
    flexDirection: "row",
    padding: 25,
    alignItems: "center",
  ,
  horizontalLine: 
    width: "100%",
    height: 1,
    backgroundColor: "#E0E0E0",
  ,
  text: 
    paddingLeft: 15,
    paddingBottom: 15,
    marginBottom: 15,
    paddingTop: 15,
  ,
  icon: 
    padding: 12,
  ,
  iconContainer: 
    backgroundColor: "red",
  ,
);

【讨论】:

您能具体说明您对样式所做的更改吗?我只看到这个添加了```alignItems:“center”```它仍然对我不起作用。问题不是警报或日志。我现在不能“点击”或“按下”图标 这种风格在这里不是强制性的……你可以忽略它。但我没有看到任何不工作的东西......你可以将你的图标部分更改为只有高度和宽度的视图......里面可触摸 我之前尝试过,但没有成功。向包含此组件的整个视图添加 zIndex 现在对我有用。

以上是关于图标的 TouchableOpacity 和 onPress的主要内容,如果未能解决你的问题,请参考以下文章

项目映射时获取键和项目 onPress TouchableOpacity

TouchableOpacity 和按钮在反应原生模态中不起作用?

在具有 backgroundColor 的 MapView 上方时,TouchableOpacity 不可点击

React Native 无法点击 TouchableOpacity 或 TextInput

在不关闭键盘的情况下使用 TouchableOpacity 清除 Textinput?

TouchableOpacity 内的 ScrollView