問題タブ [first-responder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
6717 参照

iphone - Modal View Controller 内で becomeFirstResponder を呼び出すときのキーボード アニメーションの問題

モーダルに表示される View Controller に含まれるを呼び出す際に問題が発生し-becomeFirstResponderました。キーボードがすぐに表示されるようUITextFieldに、モーダル ビュー コントローラーのメソッドでこのメソッドを呼び出します。-viewDidLoad私が期待したのは、キーボードとモーダルビューコントローラーの両方が同時に画面の下からアニメーション化することです。ただし、私が観察しているのは次のとおりです。

  1. 親ビュー コントローラーのメソッドを呼び出すボタンをクリックして-presentModalViewController:animated:から、子ビュー コントローラーがモーダル アニメーションを開始するまでには、約 0.2 秒の UI ラグがあります。
  2. モーダル ビュー コントローラーのアニメーションが開始されるとすぐに、キーボードにはまったくアニメーションが表示されません。
  3. モーダル ビュー コントローラーのアニメーションが完了すると、他のすべてがスムーズに動作するように見えます。
  4. モーダルView Controllerを閉じると、画面外でスムーズにアニメーション化されます(偶然にもキーボードと一緒に)。
  5. モーダル ビュー コントローラーを表示するボタンを最初の時間以降にクリックすると、約 0.2 秒の UI ラグがないことを除いて同じパターンになります。

キーボードのアニメーションとモーダル ビュー コントローラーのアニメーションの両方が同時に低レベルのコア アニメーション リソースを求めて競合しているように見えますが、なぜこれが発生するのかわかりません。この予感をさらに裏付けるように見えるUITextFieldのは、ファーストレスポンダーになるように要求しない場合 (つまり、キーボードにそれ自体を提示するように要求しない場合)、UI の遅延がまったくなく、モーダル ビュー コントローラーがアニメーション化することです。即座に。

興味深いことに、このようなこと[self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001];をすると、モーダル ビュー コントローラーのアニメーションとほぼ同時にキーボードのアニメーションが発生します。iPhone で実行している場合、両方がまったく同時にアニメーション化されていないことを確認するのは非常に困難です。シミュレーター。ただし、実際のデバイスで実行すると、モーダル ビュー コントローラーが表示されるまでキーボードが表示されないことが簡単にわかります。ただし、重要なのは、UI の遅延がなくなったことです。

誰もこれに似たようなことを経験しましたか?

0 投票する
2 に答える
8628 参照

iphone - iPhone のファーストレスポンダー

iPhone レスポンダー チェーンについて混乱しています。具体的には、iPhone イベント処理ガイドhttp://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.htmlには、次のように記載されています。

最初のレスポンダーは、タッチ イベント以外のイベントの最初の受信者として指定されたアプリケーション (通常は UIView オブジェクト) 内のレスポンダー オブジェクトです。

しかし、UIView は UIResponder のサブクラスです。また、UIResponder クラス リファレンスには次のように記載されています。

戻り値

受信者がファーストレスポンダーになれる場合はYES、そうでない場合はNO。討論

デフォルトでは NO を返します。レスポンダー オブジェクトがこのメソッドから YES を返すと、最初のレスポンダーになり、タッチ イベントとアクション メッセージを受け取ることができます。サブクラスは、最初のレスポンダーになることができるように、このメソッドをオーバーライドする必要があります。

明らかな矛盾に戸惑います。誰かが私のためにそれをクリアできますか?

参考までに、単純なビューベースのアプリケーションをセットアップし、そのビューで canBecomeFirstResponder と isFirstResponder を呼び出しました。どちらもNOを返しました。

0 投票する
2 に答える
1961 参照

iphone - textFieldDidBeginEditing から rejectFirstResponder を呼び出せませんか? (iPhone)

これを行う-(BOOL)textFieldShouldReturn:(UITextField *)textFieldと、機能します。しかし、同じコードを内部-(void)textFieldDidBeginEditing:(UITextField *)textFieldで使用すると、機能しません。

を呼び出していることは確かですtextFieldDidBeginEditing。私はNSLogメソッドの中にあり、それが呼び出されています。

0 投票する
1 に答える
864 参照

iphone - 2 つの画像を含む UIScrollview - 1 つの画像をズーム可能にし、1 つの画像を静的 (固定サイズ) に保つ

ズーム可能で、その上に別の半透明UIViewを含む があります。UIImageViewUIView

私が達成しようとしてUIImageViewいるのは、半透明のビューを静的に保ち、ズームしないでズームできるようにすることです。

(に追加された)UIViewの上に半透明を追加すると、すべてがズームします。ただし、両方をサブビューとして base に追加すると、タッチのみが追跡され、最後に追加されてから半透明になります。UIImageViewUIScrollViewUIViewUIView

UIView半透明のビューのサイズを変更したい場合があるため、タッチの半透明に最初に常駐するためのコントロールが必要です。UIScrollViewただし、 2 本の指を使用する場合は、タッチの制御を に渡したいと思います。とにかく私がこれを達成することはありますか?nextresponder が機能していないようです。サブクラス化に加えて hittest も使用しようとしましUIWindowたが、ベースはナビゲーション制御機能をプッシュ/ポップする必要があるため、サブクラス化してナビゲーション スタックにプッシュするUIViewことはできないと思います。UIWindow

どんな助けでも大歓迎です。

ありがとう、

ウィンストン

0 投票する
2 に答える
535 参照

keyboard - UIButtonが押された後、UITextfieldがフォーカスされています

テキストを入力するための UITextfield があります。ボタンは機能をトリガーします。IBAction の完了後、UITextfield は再びフォーカスされます。IBAction の後、キーボードを非表示にしたい。ボタンの IBAction により、キーボードが消え (UIAlert を表示しています)、IBAction の後、UITextfield のフォーカスと共にキーボードが再びポップアップします。IBAction の後に UITextfield がフォーカスされるのを防ぐことは可能ですか?

0 投票する
2 に答える
1658 参照

cocoa - NSWindow が最初に mouseOver イベントしか受信しないのはなぜですか?

orderOut と orderFront を使用して、ボーダレス ウィンドウを表示および非表示にするアプリケーションがあります。表示されている場合は、マウスが上に移動したときにキーウィンドウになるようにします。これまでのところ、私はこれを行ってきました:

  • awakeFromNib では、ファーストレスポンダーを自分自身に設定しました。
  • ウィンドウのコンストラクターで、マウスイベントを受け入れるように設定しました。
  • mouseMoved メソッドでは、makeKeyAndOrderToFront を使用します。

私の問題は、マウスをウィンドウ上に初めて移動したときにのみ機能することです。その後、mouseOver イベントを受け取りません。firstResponder をチェックしてみましたが、私が知る限り、ウィンドウから変更されることはありません。

これを機能させるために私ができることはありますか?

0 投票する
2 に答える
651 参照

iphone - UITextField にフォーカスがある場合に UIButton が無効にならない

有効および無効の状態とタイトルを設定する UIButton (送信ボタン) があります。プログラムがボタンを無効にして API 呼び出しを行っている間、送信ボタンのタイトルを使用して @"Sending..." のようなステータスを表示します。

誰かが UITextField にコメントを入力するエッジ ケースまでは問題なく動作しますが、キーボードを閉じる/編集を終了する代わりに、[送信] ボタンを押すだけです (したがって、キーボードはまだアップしています)。この場合、ボタンを無効にしても、タイトルと背景は無効状態にはなりません。

これは firstResponder の問題ですか? button.enabled = NOを設定する前にコメントフィールドにresignFirstResponderを明示的に伝えようとしていますが、それでもボタンは更新されません。

0 投票する
1 に答える
1513 参照

iphone - メニュー以外の場所で画面をクリックすると、UIMenuControllerが消えます

UIMenuControllerを使用していますが、画面をクリックすると消えます。メニューを表示するとき、メニューがフェードアウトする前にユーザーが項目を選択するのを待つ必要がありますが、画面上の任意の場所(メニューバーではない)をクリックすると、メニューはフェードアウトします。これを防ぐ方法はありますか?

UIResponderクラスと関係があるのでしょうか?私はこれを読んでいますが、レスポンダーの概念を完全に理解しているのかどうかはまだわかりません。

ありがとう。

0 投票する
2 に答える
6914 参照

iphone - サブビューとしてUIScrollViewとUITextFieldsを使用した不要な自動スクロール

「長すぎます。読みませんでした」バージョン:に指示するとき自動スクロール動作を無効にする方法はありますか?UIScrollViewUITextFieldbecomeFirstResponder

ページングが有効になっているスクロールビューと、サブビューとしてのいくつかのビューがあります。各サブビューは、独自のビューコントローラーによって制御されます。各サブビューにはUITextFieldがあります。

要件は、ページをスクロールして表示するときに、そのテキストフィールドがファーストレスポンダーになることです。

これは、指でスワイプしてスクロールする場合は問題ありません。スクロールビューデリゲートメソッドscrollViewDidEndDecelerating:を使用して、スクロールが停止し、ページが表示されていることを確認します。テキストフィールドにファーストレスポンダーになるように指示できます。

ただし、scrollviewに「autoscrolled」の場合、scrollviewにを指示する場合のように、scrollRectToVisible:animated:減速用のscrollviewデリゲートメソッドは呼び出されません。この方法は、新しく作成されたページをユーザーの介入なしにスクロールして表示する場合、またはユーザーがをタップする場合に使用しますUIPageControl

私の解決策は、ビューにスクロールするように指示する前に、テキストフィールドのファーストレスポンダーステータスを設定することでした-しかし、スクロールビューにあるテキストフィールドにファーストレスポンダーになるように指示すると、スクロールビューが自動的にビューにスクロールするようです。

これは、テキストフィールドをテーブルビューのセルに配置するときに使用される動作であると思います(テーブルビューはスクロールビューのサブクラスであるため)。テーブルビューとテーブルセル内のテキストフィールドを備えた小さなテストアプリを設定した場合、キーボードがファーストレスポンダーになったときにテーブルビューセルを覆い隠すと、テーブルビューは自動的にスクロールして表示されます。

ただし、テーブルビューを使用していない、単なるスクロールビューである私の例で、この動作が発生する理由はわかりません。

また、私のスクロールビューでは垂直スクロールが無効になっており、水平方向にのみスクロールすることにも言及する必要があります。

テキストフィールドをスクロールビューの直接サブビュー(ビューコントローラーやコンテナービューなし)として配置する別のテストアプリでテストしましたが、同じことが起こります。画面外のテキストフィールドにファーストレスポンダーになるように指示すると、スクロールビューで自動的にスクロールされます。

これは通常は問題になりませんが、スクロールビューのページングを台無しにしているようです。指でスクロールすると、各ビューがバウンスし、適切に中央に配置されます。しかし、長方形をスクロールしてアニメーションで表示し、テキストフィールドにファーストレスポンダーになるように指示すると、スクロールビューがそれ自体と競合しているように見え、ビューはビューの途中までしかスクロールされず、中央に配置されません。

次に、指を使ってビューに触れると(スワイプしたり、移動したりしないで)、スクロールビューが最初のページに戻ります。

このばかげた自動スクロール動作の現在の回避策は、を使用しNSTimerてファーストレスポンダーをいつ更新するかを決定することです。

を使用してコードを手動でスクロールし、scrollRectToVisible:animated0.3秒後にメソッドを呼び出して、テキストフィールドをファーストレスポンダーに更新します。(0.3秒は試行錯誤でした。アニメーションを許可するのに最短の時間であるように見えますが、スクロールビューとの競合を引き起こさないように十分な長さであるかどうかを確認しようとしました。

ご覧のとおり、これはエレガントではなく、壊れそうです。

UIScrollViewに指示するときUITextFieldの自動スクロール動作を無効にする方法はありますbecomeFirstResponderか?

0 投票する
2 に答える
1391 参照

iphone - ファーストレスポンダー付きのキーボード上部のツールバー

これはかなり一般的なトピックであり、そこには多くの答えがあります。

状況:下部にUIToolbarを備えたフルスクリーン(ツールバーを除く)UITextViewがあります。UITextViewがファーストレスポンダーを取得したら、ツールバーをキーボードと一緒に上にスライドさせ、キーボードを閉じる「完了」ボタンを追加します。

これまでのところ:この例に基づいて、これは完全に機能しています。[textView becomeFirstResponder];私がviewDidLoadそれを入れたとき、ツールバーがアニメートしないという事実を除いて。keyboardWillShowと呼ばれていても。誰かが何か考えを持っていますか?

コード:サンプルコードをチェックする必要がないように、これが起こっていることです:

viewDidLoadの場合:

KeyboardWillShowの場合: