禁用按钮on native native

时间:2015-10-29 06:51:34

标签: react-native

我正在使用本机做一个Android应用程序,我使用了TouchableOpacity组件来创建按钮。
我使用文本输入组件来接受来自用户的文本,一旦文本输入与某个字符串匹配,该按钮应仅启用
我可以通过最初渲染没有TouchableOpactiy包装器的按钮并在输入字符串匹配后使用包装器重新渲染来想办法。
但我猜测有更好的方法可以做到这一点。有人可以帮忙吗?

15 个答案:

答案 0 :(得分:211)

TouchableOpacity范围TouchableWithoutFeedback,因此您只需使用disabled属性:

<TouchableOpacity disabled={true}>
  <Text>I'm disabled</Text>
</TouchableOpacity>

React Native TouchableWithoutFeedback #disabled documentation

答案 1 :(得分:35)

就这样做

<TouchableOpacity activeOpacity={disabled ? 1 : 0.7} onPress={!disabled && onPress}>
  <View>
    <Text>{text}</Text>
  </View>
</TouchableOpacity>

答案 2 :(得分:3)

这似乎是使用高阶组件可以解决的问题。我可能错了,因为我很难100%自己理解它,但也许它会对你有帮助(这里有几个链接)......

答案 3 :(得分:1)

TouchableOpacity收到activeOpacity。你可以做这样的事情

<TouchableOpacity activeOpacity={enabled ? 0.5 : 1}>
</TouchableOpacity>

因此,如果它已启用,它将看起来正常,否则,它看起来就像touchablewithoutfeedback。

答案 4 :(得分:1)

所以很容易在 react native 中禁用任何按钮

<TouchableOpacity disabled={true}>
    <Text> 
          This is disabled button
   </Text>
</TouchableOpacity>

disabled 是 react native 中的一个道具,当您将其值设置为“true”时,它将禁用您的按钮

快乐编程

答案 5 :(得分:0)

您可以使用TouchableWithoutFeedback构建CustButton,并使用onPressInonPressout或其他道具设置所需的效果和逻辑。

答案 6 :(得分:0)

我能够通过在style属性中添加条件来解决这个问题。

const startQuizDisabled = () => props.deck.cards.length === 0;

<TouchableOpacity
  style={startQuizDisabled() ? styles.androidStartQuizDisable : styles.androidStartQuiz}
  onPress={startQuiz}
  disabled={startQuizDisabled()}
>
  <Text 
    style={styles.androidStartQuizBtn} 
  >Start Quiz</Text>
</TouchableOpacity>

const styles = StyleSheet.create({
androidStartQuiz: {
    marginTop:25,
    backgroundColor: "green",
    padding: 10,
    borderRadius: 5,
    borderWidth: 1
},
androidStartQuizDisable: {
    marginTop:25,
    backgroundColor: "green",
    padding: 10,
    borderRadius: 5,
    borderWidth: 1,
    opacity: 0.4
},
androidStartQuizBtn: {
    color: "white",
    fontSize: 24
}
})

答案 7 :(得分:0)

这个原生基础有解决方案:

  <Button
    block
    disabled={!learnedWordsByUser.length}
    style={{ marginTop: 10 }}
    onPress={learnedWordsByUser.length && () => {
      onFlipCardsGenerateNewWords(learnedWordsByUser)
      onFlipCardsBtnPress()
    }}
  >
    <Text>Let's Review</Text>
  </Button>

答案 8 :(得分:0)

使用以下代码禁用TouchableOpacity

<TouchableOpacity disabled={true}>
  <Text>Submit</Text>
</TouchableOpacity>

答案 9 :(得分:0)

这是我的工作,希望对您有所帮助:

<TouchableOpacity
    onPress={() => {
        this.onSubmit()
    }}
    disabled={this.state.validity}
    style={this.state.validity ?
          SignUpStyleSheet.inputStyle :
          [SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}>
    <Text style={SignUpStyleSheet.buttonsText}>Sign-Up</Text>
</TouchableOpacity>

SignUpStyleSheet.inputStyle中保留按钮的样式,无论按钮是否被禁用,然后在style={this.state.validity ? SignUpStyleSheet.inputStyle : [SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}中,如果按钮被禁用,则添加opacity属性。

答案 10 :(得分:0)

您可以启用和禁用按钮,也可以使用条件或默认情况下直接将其禁用:true

 // in calling function of button 
    handledisableenable()
        {
         // set the state for disabling or enabling the button
           if(ifSomeConditionReturnsTrue)
            {
                this.setState({ Isbuttonenable : true })
            }
          else
          {
             this.setState({ Isbuttonenable : false})
          }
        }

<TouchableOpacity onPress ={this.handledisableenable} disabled= 
     {this.state.Isbuttonenable}>

    <Text> Button </Text>
</TouchableOpacity>

答案 11 :(得分:0)

我认为最有效的方法是用视图包装touchableOpacity并添加带有样式条件的proppointerEvents。

<View style={this.state.disabled && commonStyles.buttonDisabled}        
      pointerEvents={this.state.disabled ? "none" : "auto"}>
  <TouchableOpacity
    style={styles.connectButton}>
  <Text style={styles.connectButtonText}">CONNECT </Text>
  </TouchableOpacity>
</View>

CSS:

buttonDisabled: {
    opacity: 0.7
  }

答案 12 :(得分:0)

要禁用文本,您必须按以下方式在文本样式中设置不透明度:0:

<TouchableOpacity style={{opacity:0}}>
  <Text>I'm disabled</Text>
</TouchableOpacity>

答案 13 :(得分:0)

使用禁用的真实属性

<TouchableOpacity disabled={true}> </TouchableOpacity>

答案 14 :(得分:0)

这是有史以来最简单的解决方案:

您可以将 onPressOut 事件添加到 TouchableOpcaity 并做任何你想做的事。 在 onPressOut 完成之前,它不会让用户再次按下