2017-03-03 8 views
0

私はUITextFieldを含むさまざまな要素の画面を持っています。画面上にコーチのマークを表示したいのです(私はInstructionsライブラリを使用しています)。しかし、コーチマークが表示されているときに要素とのやり取りをフリーズする必要があります(たとえば、ユーザーがテキストフィールドに項目を入力することはできません)。キーボードをiOSに隠さずに無効にするにはどうすればよいですか?

私の問題はキーボードです(この画面には常に表示されます)。テキストフィールドのisEnabledプロパティをfalseに設定するか、isUserInteractionEnabled = falseを設定すると、フィールドは最初のレスポンダを辞退し、キーボードは消えます。この画面では不自然です。ただし、textField:shouldChangeCharactersInの範囲:委譲メソッドを使用してfalseを返すと、キーボードは表示されたままになりますが、有効になります。コーチのマークが表示されたら、ユーザーはキーボードをタップすることができます。これはテキストフィールドには何の影響もありませんが、それはまだ変わって迷惑です。

キーボードを一時的に保持しますが、無効にしておくにはどうすればいいですか?私はthisを見ましたが、それは私がAppleが受け入れると思う解決策を提供しません。

ありがとう、

ヤリフ。

+1

それはあなたがちょうどあなたが助けのものを示している間に、メインウィンドウ(AppDelegateのウィンドウオブジェクト)のuserInteractionを無効にし、あなたが –

+0

するTry self.view.endEditing(true)を削除します真= textField.resignFirstResponderをお試しくださいJignesh - 全体のポイントはキーボードを隠さないことでした。 Rajeshkumar:これはまた、キーボードを却下し、テキストフィールドがフォーカスを失い、コーチマークが解除されたときにユーザーがそれを再度タップしなければならないという欠点が追加されています。マイク:これは最高の、きれいな答えのようだった。しかし残念なことに、これはresignFirstResponderを呼び出すようにも見えますし、最悪の場合でも、コーチのマーク自体が応答しなくなり、ユーザーはそれらを却下することはできません。 –

+1

キーボード –

答えて

1

キーボードが表示されているときに、UIButtonを動的に追加できます。キーボードがいつ見えているかを知るために、keyboardDidShow & keyboardDidHideオブザーバーを追加することができます。

キーボードが画面の一番上にあるという問題に直面するかもしれませんが、新しく追加されたキーボードを現在のビュー/ウィンドウの一番上にすることで対処できます。

は最高の(ときれいな)解決策になる@MikeAlterによって、あなたの質問にそのUIButton

コメントのためにfalseuserInteractionEnabledを設定することを忘れないでください。しかし、これはまた、画面上の他のコントロールへのナビゲート/操作を制御していないことを意味します。


EDIT

キーボード示す場合覆わ画面上の特定の領域を有しています。私の解決策は、正確な矩形/フレームでキーボードの場合と同じようにUIButtonをビューに追加できることを示唆しています。キーボード全体をカバーするビュー/ボタン。したがって、キーボードはユーザーの操作を受け付けません。

次のコードは、キーボードのサイズを取得できます。あなたは同じサイズのUIButtonを正確に同じ場所に追加することができます。これにより、ユーザーのやりとりがボタン自体によって処理されるため、キーボードは非アクティブになります。

- (void)keyboardDidShow:(NSNotification *)notification { 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    int height = MIN(keyboardSize.height,keyboardSize.width); 
    int width = MAX(keyboardSize.height,keyboardSize.width); 

    ... Add UIButton here with the CGRect of keyboard 
} 

は、次のように、動作するように上記のためUIKeyboardDidShowNotificationに登録する必要があります。

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardDidShow:) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 
+0

私はあなたが何を意味しているのか分かりません - 最初のレスポンダー自体になるUIButtonを追加することを意味しますか?これはどうやって私を助けますか? userInteractionEnabled = falseを呼び出すとキーボードが消えるのと同じ問題が発生します。 UIButtonを最初のレスポンダにすることができますか?たぶん私はあなたのソリューションを理解していない、私はあなたがより具体的なことができればそれを感謝したい。ありがとう! –

0

あなたはコーチがブラービューは、その後、コーチを追加マークの後ろにキーボードを作りたい最後のウィンドウにぼかしビューをマークした場合:

UIApplication.shared.windows.last?.addSubview(coachMarksBlurView) 
UIApplication.shared.keyWindow?.bringSubview(toFront: coachMarksBlurView) 

そして、あなたはキーボードをブロックしたい場合に使用できる2つの関数:

func addBlockView(){ 
    view.addSubview(viewBlock) 
    viewBlock.frame = CGRect.init(x: 0, y: 0, w: 
    UIScreen.main.bounds.size.width, h: 
    UIScreen.main.bounds.size.height) 
    viewBlock.backgroundColor = UIColor.clear 
    UIApplication.shared.windows.last?.addSubview(viewBlock) 
    UIApplication.shared.keyWindow?.bringSubview(toFront: viewBlock) 
} 

func removeBlockView(){ 
    viewBlock.removeFromSuperview() 
} 
関連する問題