UitextViewと一緒にUitextfieldを使用する場合のTextFieldShouldReturnメソッドの問題
-
26-10-2019 - |
質問
セクションごとに3つのセクションと各行を含むグループ化されたテーブルビューがあります。最初の2つのセクションの行には、uitextfield(名前と件名はセクションのタイトルです)が含まれ、最後の行にはuitextview(メッセージはセクションタイトル)が含まれています。
2つのテキストフィールドには、uireturnkeynextとしてreturnKeyTypeがあります。 uitextViewの場合、「戻り」ボタンがキーボードに存在し、新しいラインを供給します。そこで、TextFieldShouldReturnメソッドを使用して、uikeyboardのこれらの返品タイプボタンを押すことで次のセルに移動しました。
次のボタンは、最初のテキストフィールド(名前)で正常に動作します。ここに問題が発生します... 2番目のセルの次のボタンをクリックすると、1本の線が下にあるUitextView(最終セル)に移動します。つまり、カーソルは元の位置から1行を移動します。
私のコードは...
-(BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
if (textField == nameTextField) {
[subjectTextField becomeFirstResponder];
}
else if(textField == subjectTextField) {
[messageTextView becomeFirstResponder];
}
return YES;
}
これをうまく機能させるにはどうすればよいですか?前もって感謝します..
解決
多くのものをテストしている間、私はシンプルでありながら適切なソリューションを見つけました:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ( [textField isEqual: nameTextField] )
{
[nameTextField resignFirstResponder];
[messageTextView becomeFirstResponder];
return NO;
}
return YES;
}
Nametextfield自体の辞任を処理し、リクエストにNOを返します。
他のヒント
基本的に起こっているのは、返品がタップされたときにテキストビューを最初の応答者に表示し、返品がテキストビューに追加されることです。そのため、カーソルは2行目になります。 TextViewDidChange:Delegate Methodでこれを試してみてください:
- (void)textViewDidChange:(UITextView *)textView {
if(textView.text == @"\r") {
textView.text = @"";
}
の このリンク 問題の解決策が得られます。これは、テキスト編集が完了したときにキーボードをどのように非表示にするかを考えると。