OnPress 在 Touchable Opacity 中不起作用

Posted

技术标签:

【中文标题】OnPress 在 Touchable Opacity 中不起作用【英文标题】:OnPress not working inside Touchable Opacity 【发布时间】:2018-04-05 01:40:28 【问题描述】:

我正在 react-native 上构建一个移动应用程序!最近我为每个页面构建了自己的标题组件。这是我的 Header 组件的代码。我在该组件中有两个图标。但不幸的是,这些按钮根本不起作用!

import React, Component from 'react';
import  
    Text, 
    View, 
    Image, 
  Dimensions,
  TouchableOpacity
 from 'react-native';

import Icon from 'react-native-vector-icons/Ionicons';

import Styles from './Styles';

export default class ChatHead extends Component 
  constructor(props) 
      super(props);

      this.state = 
      
  

  render()
    console.log(this.props.headerText, this.props);
    if(this.props.headerText.length > 16)
      name = this.props.headerText.substr(0, 16);
      name += "..."; 
    
    else name = this.props.headerText;

    return(
      <View style=Styles.viewStyle>
        <Text style=Styles.nameStyle>name</Text>

        <TouchableOpacity 
          style=Styles.audioCallButton
          onPress=() => console.log("Audio Button Pressed")
        >
          <Icon name='md-call' size=25 color="white" align='right'/>
        </TouchableOpacity>

        <TouchableOpacity 
          style=Styles.videoCallButton
          onPress=() => console.log("Video Button Pressed")
        >
          <Icon name='ios-videocam' size=28 color="white" align='right'/>
        </TouchableOpacity>
      </View>
    );
  
;

onPress 根本没有响应!

【问题讨论】:

你也可以添加样式吗? 不工作,你的意思是你没有得到控制台输出和/或触摸没有提供任何视觉反馈? 【参考方案1】:

这里不是这样,但对于未来的读者来说,这可能是因为您将一个 TouchableOpacity 包裹在另一个中

【讨论】:

【参考方案2】:

试试这个解决方案,注意我已经将你的图标和名称包装在一个视图中。

import React, Component from 'react';
import  
  Text, 
  View, 
  Image, 
  Dimensions,
  TouchableOpacity
 from 'react-native';

import Icon from 'react-native-vector-icons/Ionicons';

import Styles from './Styles';

export default class ChatHead extends Component 
constructor(props) 
  super(props);

  this.state = 
  


render()
 return(
  <View style=Styles.viewStyle>
     <Text style=Styles.nameStyle>this.props.headerText.length > 16 ?
`$this.props.headerText.substr(0, 16)...` : this.props.headerText</Text>

    <TouchableOpacity 
      style=Styles.audioCallButton
      onPress=() => console.log("Audio Button Pressed")
    ><View>
      <Icon name='md-call' size=25 color="white" align='right'/></View>
    </TouchableOpacity>

    <TouchableOpacity 
      style=Styles.videoCallButton
      onPress=() => console.log("Video Button Pressed")
    ><View>
      <Icon name='ios-videocam' size=28 color="white" align='right'/></View>
    </TouchableOpacity>
  </View>
 );
 
;

【讨论】:

【参考方案3】:

尝试使用alert代替console.log来查看数据,可能是你错过了c的位置

【讨论】:

以上是关于OnPress 在 Touchable Opacity 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vue-native:动态创建的 touchable-opacity 一开始都被按下

React Native知识5-Touchable类组件

使用TouchableOpacity onpress的图像不能反应原生

React native TouchableOpacity onPress 在 Android Build (APK) 上不起作用

TouchableOpacity 内的 ScrollView

Touchable类组件