質問

私は自分の見解のいくつかに問題があります。ここに私のセットアップの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?

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