質問

テキストをキャプチャするために複数行のテキストフィールド(UITextView)を必要とするiPhoneアプリケーションを開発しています。

ユーザーがtextView内をタッチすると、firstResponderになり、キーボードが表示されます。本当に必要なのは、ユーザーが終了したらキーボードを取り外すことです。通常、テキストフィールドでは、[戻る] / [完了]ボタンを押すと入力の終了が通知され、デリゲートを使用してファーストレスポンダーを辞任します。ただし、複数行のテキストビューでは、ユーザーが新しい行を追加できるようにして、それができないようにします。

次のオプションは、テキストビューの外側で修正があった場合、最初のレスポンダーを辞任することです。ここでの問題は、UITextViewで宣言されているイベントがインターフェイスビルダーで確認できないことです。

iPhoneアプリで複数行のテキストフィールドを作成して、最初のレスポンダーをユーザーが使い切ったときに適切なタイミングでリリースする方法を教えてください

役に立ちましたか?

解決

ナビゲーションバーの[完了]ボタンを使用できます。

- (void)viewDidLoad {
      [super viewDidLoad];
  self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)];
}

キーボードを閉じるには、次のようなイベントを処理します:

- (void) doneAction: (id) sender{ [textView resignFirstResponder]; }

(。hファイル宣言を記憶)

他のヒント

「不足」を嘆いていると思います。複数行のUItextViewで返されるキーボードの完了ボタン。間違っている場合は修正してください。

明らかなアプローチでは、最初のレスポンダーを辞める別のボタンがインターフェースにあるようです。

何らかのイベントでキーボードを隠す巧妙なコードは、非常に直感的に使用できるとは思いません。

Apple Notesアプリケーションは右上の完了ボタンを使用してファーストレスポンダーを辞退します。このようなアプローチは賢明なようです。

//If user touches outside of the keypad, then the keypad will go away
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [[event allTouches] anyObject];
        if (touch.tapCount >= 1) {
            [ZLabel resignFirstResponder];

        }
  }

すべての画面を覆う非表示ボタンを作成し、それにメソッドを追加できます。このように動作すると思います。

- (IBAction)backgroundClick:(id)sender{
    [textView resignFirstResponder];
}

キーボードの「完了」キーを完全に設定している場合、使用する方法は、内容が変更されたときにUITextViewの最後の文字をチェックすることです。最後の文字が改行の場合、ユーザーは完了ボタンを押しています。別のボタンがあるはずだというニールの見解を改めて考えますが、顧客が望むものを手に入れることもあります。

明らかに、このメソッドが存在するクラスを指すようにUITextViewのデリゲートを設定する必要があります。 -(void)textViewDidChange:(UITextView *)inTextView メソッドは、UITextViewDelegateプロトコルの一部です。

- (void)textViewDidChange:(UITextView *)inTextView {
NSString *text = inTextView.text;

if ([text length] > 0 && [text characterAtIndex:[text length] -1] == '\n') {
    message = [text substringToIndex:[text length] -1];
    [delegate messageEdited];
    [self removeFromSuperview];
}

}

  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

    [txtView resignFirstResponder];
    

    YESを返します。 }

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top