モーダルビューの問題
-
27-10-2019 - |
質問
私は自分の見解のいくつかに問題があります。ここに私のセットアップのBreifの概要があります。
Tab Bar Controller
|
--View Controller 1
|
--View Controller 2
|
--View Controller 2
特定のアクションでは、View Controller 1にモーダルダイアログが表示されます。この対話の中で、ユーザーが別のアクションを実行する場合、最初のモーダルダイアログを使用してビューを提示する別のモーダルダイアログが表示されます。
2番目のModaldialogでは、UitextFieldがありますが、テキストフィールドに入力しようとすると何も起こりません。キーボードが表示され、TextFieldDidBegineditingメソッドが呼び出されます。 uitextfielddelegateとnessessaryの応答者をセットアップしましたが、役に立ちません。
誰もがこの問題を引き起こすものを知っていますか?
どうもありがとう
解決
私は、あなたが説明するような症状にテキストフィールドが正しく焦点を合わせていないことを、見解の変化とポップオーバーの場合に何度も発見しました。これらの機会に、私は最終的に延期します becomeFirstResponder
アニメーションが終了するか、ビューがロードされるまで電話をかけます - たとえば、ビューコントローラーで viewDidAppear
方法。
または、通話を遅らせるだけです becomeFirstResponder
ビューが変更 /アニメーション /などにかかる時間の適切なゲストの場合。
[textField performSelector:@selector(becomeFirstResponder)
withObject:nil
afterDelay:0.3];
他のヒント
可能であれば、ビューコントローラーからモーダルダイアログを「チェーン」しようとします。
- VCは、最初のモーダルダイアログを開きます
- 最初のモーダルダイアログはVCに通知します(おそらく委任を使用)。
- (たぶん必須)最初のモーダルダイアログを閉じます
- VCは2番目のモーダルダイアログを開きます
- 幸福!
「モーダルダイアログ」で何を意味するのかわからない - 私はあなたがモダンに提示されたビューコントローラーを含むどちらかを意味すると思います UIModalPresentationFormSheet
モーダルプレゼンテーションスタイルまたはuipopoverController。
これが私の最高です 推測してみて: :あなたの「モーダルダイアログ」がすべてのユーザーインタラクションをキャプチャしていると確信しています(デフォルトで)。したがって、最初のものを押すと、すべての入力フォーカスがキャプチャされます。 2番目のものを押すと、以前のものとキャプチャする競合であるため、キーボードは機能しません。
とにかく、両方のタイプの「モーダル対話」は積み重ねることを意図していません。技術的に機能する場合でも、私はそれが相互作用設計の視点を形成するように嫌いです。バグを修正したり、回避しようとする代わりに、モーダルの対話を再考してみてください。すべてを1つに収めることができます。たとえば、そのビュー内のナビゲーションコントローラーを使用したり、ビューを交換したり、コンテンツをひっくり返したりすることにより...
これが役立つことを願っています、マックス
もし私があなただったら、ナビゲーション階層を改訂することを検討します。モーダルダイアログはそのように十分に悪いと見なされますが、モーダルダイアログを組み込む モーダルダイアログ内 ユーザーインターフェイスの自殺です。それはユーザーに混乱を引き起こし、非常に非伝統的です。最初のモーダルポップアップを使用して、単にコンテンツを交換する方法はありますか?
サイドノート:あなたはビューを設定することに言及しました UITextViewDelegate
. 。テキストボックスの代表者としての見解はありましたか?あなたは戻ってきていますか NO
また FALSE
から - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
?