0

我正在使用 @shoutem/ui 库,它有自己的 TextInput 实现来进行本机反应。

https://github.com/shoutem/ui/blob/develop/components/TextInput.js

我正在尝试将焦点设置在键盘上的下一个输入上,下一个按钮按下就像这样

React Native:按下“下一个”键盘按钮后如何选择下一个TextInput?

但是,Shoutem/ui 的实现没有公开我可以从参考中使用的 TextInput 的 focus() 方法。

如何将 TextInput 的焦点方法公开为外部类中的属性?

import React, { Component } from 'react';
import { TextInput as RNTextInput } from 'react-native';

import { connectStyle } from '@shoutem/theme';
import { connectAnimation } from '@shoutem/animation';

class TextInput extends Component {
  focus() {
     // how do I expose the react native text input focus method from this class?  
     // do I get a reference to the text input component somehow?
  }
  render() {
    const { props } = this;
    const style = {
      ...props.style,
    };
    delete style.placeholderTextColor;
    delete style.selectionColor;

    return (
      <RNTextInput
        {...props}
        style={style}
        placeholderTextColor={props.style.placeholderTextColor}
        selectionColor={props.style.selectionColor}
      />
    );
  }
}

TextInput.propTypes = {
  ...RNTextInput.propTypes,
  style: React.PropTypes.object,
};

const AnimatedTextInput = connectAnimation(TextInput);
const StyledTextInput = connectStyle('shoutem.ui.TextInput')(AnimatedTextInput);

export {
  StyledTextInput as TextInput,
};
4

1 回答 1

1

您可以使用refs

focus() {
    this.rnInput.focus();
}
render() {
    const { props } = this;
    const style = {
    ...props.style,
    };
    delete style.placeholderTextColor;
    delete style.selectionColor;

    return (
    <RNTextInput
        {...props}
        ref={input => this.rnInput = input}
        style={style}
        placeholderTextColor={props.style.placeholderTextColor}
        selectionColor={props.style.selectionColor}
    />
    );
}

一点解释。ref 回调在组件完成渲染后执行,然后您可以获得此组件的当前实例的引用,您可以将其保存在变量中以供以后使用ref={input => this.rnInput = input}。现在您可以使用this.rnInput来调用该focus方法。

于 2017-01-14T18:19:04.643 回答