2

ビュー A には、テキスト フィールドがあります。コントロールをタップして、新しいビュー コントローラー B をプッシュします。ビュー B には、キーボードに対応するようにフレームを調整する必要があるテキスト ビューのみがあり、常にテキスト ビューをファーストレスポンダーに設定し、ビューが表示されるとすぐにキーボードが表示されるようにします。 Bが押し込まれます。

通常のキーボード通知処理はビュー コントローラ B で行います。そのため、ビュー B が押される前にキーボードが表示されなくても問題ありません。ただし、ビュー A のテキスト フィールドが最初のレスポンダーであり、ビュー コントローラー B を押したときにキーボードが既に表示されている場合、UIKeyboardWillShowNotification/UIKeyboardDidShowNotification を受け取りません。この状況を処理するための提案はありますか?

4

6 に答える 6

1

以前にこの問題に遭遇したことはありませんが、提案があります。おそらくビュー B では、textViewresignFirstResponderを許可してbecomeFirstResponderから、強制的にキーボード通知を出すことができます。以下のサンプル:

[textView resignFirstResponder];
[textView becomeFirstResponder];

そして、別の散歩道があります。おそらく、resignFirstResponder押す前にビューAで、次にbecomeFirstResponderビューBがviewDidAppear.

それが役に立てば幸い。

于 2012-04-07T05:17:04.300 に答える
0

ファーストレスポンダーを辞任してから再びファーストレスポンダーになることは、私が最初に考えたときにすぐにやめた良い解決策ではありません。キーボードがすでにあるときにキーボードを強制的に非表示にしてすぐに再び表示するのは正しいことではありません。それは無駄であり、スムーズな移行を妨げます。

Bのカプセル化を解除してキーボードステータスをビューAからビューBに送信することは、ソフトウェアエンジニアリングでは受け入れられないことでもあります。

ですから、バグレポートに値すると思います。私はバグレポートを作成しました— #11205521

于 2012-04-07T16:10:46.233 に答える
0

こんにちは、キーボードに応じてビューのサイズを変更するには、次のようなものを使用します

- (void) animateView: (BOOL) up
{
    CGRect rect = self.view.frame;

    if(up)
    {
        float movement = (up ? 264 : 416);
        rect.size.height = movement;
        self.view.frame = rect;
    }
    else
    {
        rect.size.height = 480;
        self.view.frame = rect;
    }
}

BOOL 変数 up は、キーボードが表示されているかどうかを示すために使用されます

お役に立てれば!

よろしく、ホルヘ

于 2012-11-15T19:01:08.603 に答える
0

試してみてくださいUITouch

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
  // Detect touch anywhere
  UITouch *touch = [touches anyObject];

  // Get the point that was touched
  CGPoint point = [touch locationInView:self.view];
  NSLog(@"pointx: %f pointy:%f", point.x, point.y);

  // Check if the point touched is within these rectangular bounds
  if (CGRectContainsPoint(CGRectMake(5, 5, 40, 130), point))
  {
    //do something...
  } 
}
于 2012-07-29T16:33:32.460 に答える
0

キーボードのステータス情報をviewController Bに渡すことができます...これは良い方法ではありませんが、 viewController A の viewWillDisappear で [textView rejectFirstResponder] を呼び出すなど、他の方法をいくつか試しましたが、すべて機能していません。

于 2012-04-07T06:34:14.413 に答える