ユーザーが入力している間、キーボードの「return」機能を削除したいので、新しい行はないので、代わりに「return」キーを「Done」として機能させて、キーボードを非表示にします。
編集可能なUITextViewを使用しているため、ユーザーは投稿を入力してメインタイムラインに投稿できますが、セルが固定されているため、ユーザーが「return」キーを押したくない彼らの投稿はタイムラインの範囲外になります。
私はこれをUITextFieldで動作しますが、UITextViewでは動作しませんでした:
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder() //if desired
return true
}
したがって、UITextViewでそれを行う方法があるかどうか、または少なくとも改行を作成する代わりにReturnキーを押した場合にキーボードを非表示にできる方法があるかどうかを知りたかっただけです。
テキストフィールドのリターンキータイプを設定できます。
textField.returnKeyType = UIReturnKeyType.Done
更新上記のように、確実に同じアプローチを使用してリターンキーを「完了」に設定できます。ただし、ユーザーがReturnキーを押したときにUITextViewはコールバックを提供しません。回避策として、textView(textView:UITextView、shouldChangeTextInRange range:NSRange、replacementText text:String)デリゲート呼び出しを処理し、改行文字の入力を検出するとキーボードを閉じることができます:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
textView.resignFirstResponder()
}
return true
}
私は多くのコードを試しましたが、最終的にはSwift 3.0最新[2019年4月]これはUITextFieldsを使用して達成されました
このコードを機能させるには、「ViewController」クラスに「UITextFieldDelegate」を継承する必要があります。
class ViewController: UIViewController,UITextFieldDelegate
適切なタグ番号を持つテキストフィールドを追加します。このタグ番号は、割り当てられた増分タグ番号に基づいて適切なテキストフィールドに制御を移すために使用されます。
override func viewDidLoad() {
userNameTextField.delegate = self
userNameTextField.tag = 0
userNameTextField.returnKeyType = .next
passwordTextField.delegate = self
passwordTextField.tag = 1
passwordTextField.returnKeyType = .go
}
上記のコードでは、「returnKeyType = UIReturnKeyType.next」でキーパッドのリターンキーを「Next」として表示し、アプリケーションに基づいて値を変更する「Join/Go」などのオプションもあります。
この「textFieldShouldReturn」は、UITextFieldDelegateによって制御されるメソッドであり、タグ値の増分に基づいた次のフィールド選択があります。
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
textField.resignFirstResponder()
return true;
}
return false
}
ストーリーボードまたはxibを使用している場合は、セットアップコードを必要とせずに、Interface Builder内で_UITextView's
_ Returnボタンを「完了」(またはその他のさまざまなオプション)に変更できます。 Attributesインスペクターでこのオプションを探してください:
そこから、他の人がすでにここで提供しているUITextViewDelegate
コードとペアにします。
Swift v5:
_extension ExampleViewController: UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
textView.resignFirstResponder()
}
return true
}
}
_
そして、viewDidLoad()
メソッドで:
_exampleTextView.delegate = self
_
Working in Swift 4
これをviewDidLoad()に追加します。
textField.returnKeyType = UIReturnKeyType.Done
これを好きな場所に追加します。
extension UITextView: UITextViewDelegate {
public func textViewDidChange(_ textView: UITextView) {
if text.last == "\n" { //Check if last char is newline
text.removeLast() //Remove newline
textView.resignFirstResponder() //Dismiss keyboard
}
}
}