2017-11-01 10 views
0

私は実際これを知っていますが、私は別のアプローチが必要です。
は、だから私は持っているように、テキスト入力:次のプレスで次の入力をフォーカスする方法

<TextInput returnKeyType='next' 
      ref={ref => this.someName = ref} 
      onSubmitEditing={(event) => { this.nextFieldName.focus() }}/> 

トリックは、私は次のフィールドのために特定の名前を使用したくないが、任意にフォーカスする場合は、単純に次の焦点を当てるということですが。
これは可能ですか?

<TextInput returnKeyType='next' 
     onSubmitEditing={(event) => { this.someName.focus() }} 
/> 

<TextInput returnKeyType='next' 
     ref={ref => this.someName = ref} 
/> 

答えて

0

それはビット幅の広いあなたの質問です:

+0

私はすべてこれをしました。私はちょうどref = {ref => this.refs [item.UniqueName] = ref}のような文字列を使い、onSubmitEditing()ハンドラのthis.refs []は空です。解決策はthis.refs = [];を追加することでした。コンストラクタで。 – 1110

+0

'this.refs = {}'をコンストラクタで初期化しましたか?また、別の名前を使用してみることもできます。 Reactも使用しているので、 'this.refs'は動作しないかもしれません。 'this.fields = {}'のようなものを使ってみて、次に '(ref)=> this.fields [item.UniqueName] = ref' – bennygenel

0

はあなたがnextを押すと、これは次の入力を中心に説明する方法で、その後2 textInputsがあるとします。あなたがもっと詳細を述べるなら、私は助けてもいいかもしれませんが、今は私に例を挙げましょう。

マッピングしてフォームを作成するデータの配列があるとします。

const data = [ 
    { 
    type: 'text', 
    value: 'name' 
    }, 
    { 
    type: 'text', 
    value: 'surname' 
    }, 
    { 
    type: 'number', 
    value: 'age' 
    } 
]; 

は今、我々は上と別のフィールドは、我々は、フォームの焦点を合わせるか、提出することができますが存在するかしない場合であるフィールドを知っているので、データ今

data.map((field, index) => { 
    return (
    <TextInput 
     type={field.type} 
     value={this.state[field.value]} 
     ref={(ref) => this.refs[index] = ref} 
     onSubmitEditing={() => this.onSubmitEditing(index)} 
    /> 
); 
}); 

を反復処理することができます。

onSubmitEditing = (index) => { 
    if (data.length <= (index + 1)) { 
    this.refs[index + 1].focus(); 
    } else { 
    // no input to move 
    // submit form 
    } 
} 
+0

これは私が私の質問を持っているのはrefなしで作る方法です。 – 1110

+0

@ 1110 refなしでは、どのコンポーネントにフォーカスするのかを反応ネイティブに伝えることなく、何もしないためです。 'ref'はコンポーネントへの参照を提供し、このコンポーネントをフォーカスするためにreact-nativeに指示します。 –

関連する問題