代码之家  ›  专栏  ›  技术社区  ›  Adam McGurk

文本输入将自动“突出显示”置于文本反应本机之后

  •  1
  • Adam McGurk  · 技术社区  · 7 年前

    我在iOS中发现了这种奇怪的行为(在模拟器和真实设备上,但我只有模拟器的屏幕截图),在输入到textInput组件时,它会在输入的文本后面加上一个奇怪的突出显示。我引用了这个问题(自关闭以来): https://github.com/facebook/react native/issues/7070

    我已经搜索了文档( https://facebook.github.io/react-native/docs/textinput )以获得对此的答案,但似乎无法找到任何答案。我以为我已经接近了 selecttextonfocus prop,但是我将其设置为false,没有任何变化(行为保持不变)。

    我还尝试将textDecorationColor和textShadowColor设置为透明,但没有效果。我现在真的不知道该做什么。

    这是我输入的代码:

    import react from'react';
    从'react native'导入视图、文本、文本输入、样式表;
    
    导出类GeneralInput扩展react.component{
    
    建造师(道具){
    超级(道具);
    这个状态={
    占位符:this.props.placeholder,
    输入值:“”
    输入:假,
    };
    }
    WheninPutisFocused()时{
    this.setState(占位符:“”);
    }
    当输入模糊时()。{
    if(this.state.inputValue==“”){
    this.setState(placeholder:this.props.placeholder);
    }
    }
    focusNextField(nextField)this.refs[nextField].focus();
    
    RelDead(){
    const autofocus=this.props.autofocus='真';
    const multiline=this.props.multiline='true';
    返回(
    <view style=styles.outerContainer>
    <text style=styles.labelText>this.props.labelText</text>
    <文本输入
    autocapitalize='none'
    自动对焦=自动对焦
    onChangeText=(inputValue)=>this.setState(inputValue)
    value=this.state.inputValue_
    secureTextEntry=this.props.secureTextEntry_
    onblur=this.whenInputisblued.bind(this)
    onfocus=this.whenInputIsFocused.bind(this)
    underlineColorandroid=“透明”
    keyboardtype=this.props.type_
    returnkeytype=this.props.returnkeytype_
    placeholder=this.state.placeholder_
    placeholderTextColor='rgba(255、255、255、0.3)'
    多行=多行
    selecttextonfocus=假
    onsubmiteding=()=>this.focusNextField(this.props.ref)
    BluronSubmit=(this.props.movealongtype=='next')?假:真}
    style=styles.inputstyles/>
    &Lt/VIEW & GT;
    ;
    }
    }
    
    const styles=样式表。创建({
    外部容器:{
    justifycontent:'中心',
    alignitems:'灵活开始',
    宽度:“90%”,
    边缘底部:20,
    }
    标签文本:{
    fontfamily:'rubik bold',
    字体大小:14,
    fontweight:'粗体',
    颜色:“fff”,
    边缘底部:5,
    }
    输入样式:{
    身高:40,
    边界半径:2,
    背景色:“rgba(255、255、255、0.3);”,
    阴影颜色:“rgba(0,0,0,0.15)”,
    阴影偏移量:宽度:0,高度:2,
    阴影不透明度:0,
    阴影半径:0,
    宽度:“100%”,
    textDecorationColor:'透明',
    字体大小:14,
    颜色:''fff',
    padding左:15,
    fontfamily:'rubik bold',
    }
    (});
    

    下面是实际情况的屏幕截图(第一个屏幕截图带有突出显示,第二个屏幕截图只是输入占位符文本以供参考):

    所以问题是…我该如何在iOS上去掉那些奇怪的亮点? https://github.com/facebook/react-native/issues/7070

    我搜遍了医生(https://facebook.github.io/react-native/docs/textinput)对于这个问题的答案,但似乎没有什么答案。我以为我和selectTextOnFocusprop,但是我把它设置为false,没有任何变化(行为仍然存在)。

    我还尝试将textDecorationColor和textShadowColor设置为透明,但没有效果。我现在真的不知所措。

    这是我输入的代码:

    import React from 'react';
    import { View, Text, TextInput, StyleSheet } from 'react-native';
    
    export class GeneralInput extends React.Component {
    
        constructor(props) {
            super(props);
            this.state = {
                placeholder: this.props.placeholder,
                inputValue: "",
                inputting: false,
            };
         }
        whenInputIsFocused() {
            this.setState({placeholder: ""});
        }
        whenInputIsBlurred() {
            if (this.state.inputValue === "") {
                this.setState({placeholder: this.props.placeholder});
            }
        }
        focusNextField(nextField) { this.refs[nextField].focus(); }
    
      render() {
        const autoFocus = this.props.autoFocus == 'true';
        const multiline = this.props.multiline == 'true';
        return(
            <View style={styles.outerContainer}>
                <Text style={styles.labelText}>{this.props.labelText}</Text>
                <TextInput 
                    autoCapitalize='none' 
                    autoFocus={autoFocus}
                    onChangeText={(inputValue) => this.setState({inputValue})}
                    value={this.state.inputValue} 
                    secureTextEntry={this.props.secureTextEntry} 
                    onBlur={this.whenInputIsBlurred.bind(this)} 
                    onFocus={this.whenInputIsFocused.bind(this)} 
                    underlineColorAndroid="transparent" 
                    keyboardType={this.props.type} 
                    returnKeyType={this.props.returnKeyType} 
                    placeholder={this.state.placeholder} 
                    placeholderTextColor='rgba(255, 255, 255, 0.3)'
                    multiline={multiline}
                    selectTextOnFocus={false}
                    onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
                    blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
                    style={styles.inputStyles} />
            </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
        outerContainer: {
            justifyContent: 'center',
            alignItems: 'flex-start',
            width: '90%',
            marginBottom: 20,
        },
        labelText: {
            fontFamily: 'rubik-bold',
            fontSize: 14,
            fontWeight: 'bold',
            color: '#fff',
            marginBottom: 5,
        },
        inputStyles: {
            height: 40,
            borderRadius: 2,
            backgroundColor: 'rgba(255, 255, 255, 0.3);',
            shadowColor: 'rgba(0, 0, 0, 0.15)',
            shadowOffset: {width: 0,height: 2},
            shadowOpacity: 0,
            shadowRadius: 0,
            width: '100%',
            textDecorationColor: 'transparent',
            fontSize: 14,
            color: '#fff',
            paddingLeft: 15,
            fontFamily: 'rubik-bold',
        },
    });
    

    下面是实际情况的屏幕截图(第一个屏幕截图带有突出显示,第二个屏幕截图只是输入了占位符文本以供参考):
    enter image description here

    enter image description here

    所以问题是…我该如何在iOS上去掉那些奇怪的亮点?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Siraj Alam    7 年前

    Text 未选定,它只是样式中给定的背景色。

    只需从样式中删除背景色 <TextInput />

        2
  •  0
  •   Adam McGurk    7 年前

    因此,根据@siraj,这种奇怪行为发生的原因是因为我将背景色应用于 <TextInput /> 组件也被应用于正在输入的文本。所以,我把 <文本输入/gt; 在一个 <View /> ,应用 height , width , backgroundColor , shadow borderRadius 周围的道具 <查看/gt; ,效果理想!请参见下面的代码:

    import React from 'react';
    import { View, Text, TextInput, StyleSheet } from 'react-native';
    
    export class GeneralInput extends React.Component {
    
        constructor(props) {
            super(props);
            this.state = {
                placeholder: this.props.placeholder,
                inputValue: "",
                inputting: false,
            };
         }
        whenInputIsFocused() {
            this.setState({placeholder: ""});
        }
        whenInputIsBlurred() {
            if (this.state.inputValue === "") {
                this.setState({placeholder: this.props.placeholder});
            }
        }
        focusNextField(nextField) { this.refs[nextField].focus(); }
    
      render() {
        const autoFocus = this.props.autoFocus == 'true';
        const multiline = this.props.multiline == 'true';
        return(
            <View style={styles.outerContainer}>
                <Text style={styles.labelText}>{this.props.labelText}</Text>
                <View style={styles.inputContainer}> // added View
                    <TextInput 
                        autoCapitalize='none' 
                        autoFocus={autoFocus}
                        onChangeText={(inputValue) => this.setState({inputValue})}
                        value={this.state.inputValue} 
                        secureTextEntry={this.props.secureTextEntry} 
                        onBlur={this.whenInputIsBlurred.bind(this)} 
                        onFocus={this.whenInputIsFocused.bind(this)} 
                        underlineColorAndroid="transparent" 
                        keyboardType={this.props.type} 
                        returnKeyType={this.props.returnKeyType} 
                        placeholder={this.state.placeholder} 
                        placeholderTextColor='rgba(255, 255, 255, 0.3)'
                        multiline={multiline}
                        selectTextOnFocus={false}
                        onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
                        blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
                        style={styles.inputStyles} />
                    </View> // Closing the added View
            </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
        outerContainer: {
            justifyContent: 'center',
            alignItems: 'flex-start',
            width: '90%',
            marginBottom: 20,
        },
        labelText: {
            fontFamily: 'rubik-bold',
            fontSize: 14,
            fontWeight: 'bold',
            color: '#fff',
            marginBottom: 5,
        },
        inputContainer: { // added styles
            height: 40,
            width: '100%',
            backgroundColor: 'rgba(255, 255, 255, 0.3);',
            shadowColor: 'rgba(0, 0, 0, 0.15)',
            shadowOffset: {width: 0,height: 2},
            shadowOpacity: 0,
            shadowRadius: 0,
            borderRadius: 2,
        },
        inputStyles: {
            height: '100%',
            width: '100%',
            fontSize: 14,
            color: '#fff',
            paddingLeft: 15,
            fontFamily: 'rubik-bold',
        },
    });
    
    推荐文章