2016-12-14 4 views
0

返品キーを押したときにキーボードを消す方法はたくさんありますが、返品キーの機能を使用してユーザーが新しい行を作れるようにしたいそれでもキーボードを閉じる方法が必要です。返品機能を維持しながらキーボードをUITextViewに移動させる

私が考えていることのいくつかは、ジェスチャー認識機能がキーボードを閉じることですが、それは直感的ではないかもしれません。ここでの考え方とベストプラクティスは高く評価されます。

回答する前に注意してください。ユーザーがキーボードを閉じるためにUITextViewの外側をクリックしたが、この特定のUITextViewが画面全体を占め、そのようなタップが機能しない場合、既にジェスチャー認識機能があります。

私が使っている私の現在のコードは、別の投稿から取ったもので、以下のようになります。

extension UIViewController { 
    func hideKeyboardWhenTappedAround() { 
     let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard)) 
     view.addGestureRecognizer(tap) 
    } 

    func dismissKeyboard() { 
     view.endEditing(true) 
    } 
} 

私がしなければならないのは、私は任意のテキストコントロールからどこか私のためにキーボードを閉じるには、タップを配置したい場所に私のViewControllerでこの関数を呼び出しています。これまでのところ、は素晴らしいですが、コントロール自体をクリックしても、キーボードが消えないという問題が発生します。

フルスクリーンを使用するUITextViewのキーボードを閉じるにはどうすればよいですか?

+1

は、私はあなたがキーボード上の「完了」ボタンをツールバーを追加することを提案する際 ** は、キーボードを閉じトリックを行う必要があります。 (http://stackoverflow.com/questions/20192303/how-to-add-a-done-button-to-numpad-keyboard-in-ios/20192799) –

+0

同時に、次のようなものを使うことができます: '' UIScrollViewKeyboardDismissModeInteractive' –

+0

ツールバーは非常に興味深いアイデアです。 –

答えて

3

キーボードの上に「完了」ボタンが付いたツールバーを追加することを提案します。ここで

extension UITextView { 

    func addDoneButton() { 
     let keyboardToolbar = UIToolbar() 
     keyboardToolbar.sizeToFit() 
     let flexBarButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, 
              target: nil, action: nil) 
     let doneBarButton = UIBarButtonItem(barButtonSystemItem: .done, 
              target: self, action: #selector(UIView.endEditing(_:))) 
     keyboardToolbar.items = [flexBarButton, doneBarButton] 
     self.inputAccessoryView = keyboardToolbar 
    } 
} 

単に今から任意のUITextViewにaddDoneButtonを呼び出し、それを使用することがHow to add a 'Done' button to numpad keyboard in iOS

を考えられる解決策:これを行う方法のチュートリアルの多くは、SOの回答をコピーする理由もなく、ただチェックがあります。

+0

この「完了」ボタンを追加しようとしています。これを機能させることができれば、わかりやすい直感的な答えと思います。 20分を与える... –

+0

@JosephAstrahan私を更新してください。 ;) –

+0

偉大な作業をしましたが、このようなUITextViewの拡張機能を使って私の解決策を少し修正しましたUITextView –

1

ビューコントローラにこのメソッドを追加します。

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
    if text == "\n" { 
     textView.resignFirstResponder() 
     return false 
    } 
    return true 
} 

は、だけでなく、この、それはキーボードの外にタップまたはのTextView

*/ 
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    if let touch = touches.anyObject() as? UITouch { 
     if touch.phase == UITouchPhase.Began { 
      textField?.resignFirstResponder() 
     } 
    } 
} 
+0

私はあなたのソリューションにも興味がありますが、違いはあなたのソリューションとツールバーのソリューションの違いだと思いますか?同様の利点/欠点など... –

+0

@JosephAstrahanよく主な違いは、あなたの質問に答えて、 "返すキー"の機能を与えたり保持したりすることです。私たちがPCにいないのでツールバーは必要ありません。欠点:ユーザーのやりとりはちょっと分かりません。これはユーザーが使い慣れたものではないからです。 – Mingebag

+0

おかげでわかりました。私はこれを両方の方法で行い、このケースで私のクライアントが好きなものを見なければなりません。 –

関連する問題