如何使用react-native的TextInput的`selectionState`道具?

时间:2016-07-16 18:13:49

标签: javascript ios react-native

我正在构建一个本机应用程序。我有一个<TextInput>,当发生某些事情时,我希望<TextInput>成为焦点。 <TextInput>个实例上唯一记录的方法是.isFocused().clear() - 这似乎都不是我想要的。我显然想要.focus()

我发现这个仅限iOS的selectedState道具似乎提供了我正在寻找的东西。 The docs说:

  

iOS selectionState DocumentSelectionState

     

DocumentSelectionState的一个实例,这是一个负责维护文档选择信息的状态。

     

可以使用此实例执行的某些功能是:

     
      
  • blur()
  •   
  • focus()
  •   
  • update()
  •   
     
    

您可以在DocumentSelectionState

中引用vendor/document/selection/DocumentSelectionState.js   

我不清楚如何运用这个道具,我还没有在网上找到任何例子。文档页面上发布的冗长示例代码不能使用它。

有人能告诉我这可能是什么样子吗?这是我最好的猜测:

import React, {
    Component
} from 'react';
import {
    // the "DocumentSelectionState.js" file mentioned in the docs
    // lives inside react-native, so hopefully it's exported 
    DocumentSelectionState,
    TextInput,
    TouchableHighlight,
    View
} from 'react-native';
import Styles from './style';

export default class Scene extends Component {

    constructor(props) {
        super(props);

        // get my hands on "An instance of DocumentSelectionState"
        // which I can pass to the TextInput, and whose .focus()
        // method I can call
        this.text1DSS = new DocumentSelectionState();
    }

    render() {
        return (
            <View style={Styles.CONTAINER}>


                <TextInput style={Styles.TEXT_INPUT_1}
                    // provide my own instance of DocumentSelectionState
                    // to the TextInput instead of whatever is the
                    // default source
                    selectionState={this.text1DSS}
                />


                <TouchableHighlight style={Styles.BUTTON_FOR_FOCUSING_INPUT}
                    onPress={this.onPressButton}
                >
                    <View>
                        <Text>click me to focus textinput</Text>
                    </View>
                </TouchableHighlight>

            </View>
        );
    }

    onPressButton = (event) => {
        // whenever I want to, I can invoke .focus() on the DSS
        // that's linked to the TextInput
        this.text1DSS.focus();
    };

}

不幸的是,该代码不会运行:

  

undefined不是构造函数(评估&#39; new _reactNative.DocumentSelectionState()&#39;)

我认为这意味着本地反应并没有导出DocumentSelectionState成员(或者至少我的版本不是{0.23,仍然是documents the prop)。

我还没有能够弄清楚如何在vanilla RN设置中访问DocumentSelectionState,所以我无法真正测试我的理论。

有没有人在使用这个东西?

1 个答案:

答案 0 :(得分:3)

我能够访问.focus()方法的唯一方法是通过this.refs

您的代码看起来像:

import React, { Component } from 'react';
import { TextInput, TouchableHighlight, View } from 'react-native';
import Styles from './style';

export default class Scene extends Component {


    render() {
         return (
            <View style={Styles.CONTAINER}>


                <TextInput 
                     style={Styles.TEXT_INPUT_1}
                     ref={'input'}
                />


                <TouchableHighlight style={Styles.BUTTON_FOR_FOCUSING_INPUT}
                    onPress={this.onPressButton}
                >
                    <View>
                        <Text>click me to focus textinput</Text>
                    </View>
                </TouchableHighlight>

            </View>
        );
    }

    onPressButton = (event) => {
        this.refs.input.focus()
    };

}

希望有所帮助