60

アップデート:

また、UITextViewDelegateデリゲートを実装してから、コントローラーで実行してみました。

- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
    [textView resignFirstResponder];
    return YES;
}

また、テキストビューのデリゲートをself(コントローラービューインスタンス)に設定しました。

[完了]ボタンをクリックしても、新しい行が挿入されます:(


アップデート:

私がこれまでにしたこと。ビューコントローラによってUITextFieldDelegateを実装しました。

テキストビューをアウトレット経由でビューコントローラに接続しました。

それから私はしました:


self.myTextView.delegate = self;

と:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

しかし、[完了]ボタンをクリックすると、新しい行が追加されるだけです。

そのため、シーンにUITextView要素があり、ユーザーがそれをタップすると、キーボードが表示され、編集できます。

ただし、キーボードを閉じることはできません。

キーボードに[完了]ボタンを追加して、閉じることができるようにするにはどうすればよいですか?

4

9 に答える 9

126

それは非常に簡単です:)

[textField setReturnKeyType:UIReturnKeyDone];

キーボードを閉じるには<UITextFieldDelegate>、クラスにプロトコルを実装し、

textfield.delegate = self;

と使用

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [textField resignFirstResponder];
}

また

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}
于 2012-04-09T17:33:05.303 に答える
18

ストーリーボードに移動し、テキストフィールドを選択すると、属性インスペクターの下に「リターンキー」というオプションがあります...「完了」を選択します。

次に、ViewControllerに移動して、以下を追加します。

- (IBAction)dismissKeyboard:(id)sender;
{
    [textField becomeFirstResponder];
    [textField resignFirstResponder];
}

次に、テキストフィールドに戻り、アウトレットをクリックし、[終了時に終了しました]にリンクして、キーボードアクションを閉じます。

于 2012-04-09T17:38:52.383 に答える
17

UIToolBarをカスタムビューとして追加します。このビューには、UIBarButtonItemとして[完了]ボタンが含まれます。

これは、任意のタイプのキーボードに[完了]ボタンを追加するためのより安全でクリーンな方法です。UIToolBarを作成し、それにDone Buttonを追加して、任意のUITextFieldまたはUITextViewのinputAccessoryViewを設定します。

UIToolbar *ViewForDoneButtonOnKeyboard = [[UIToolbar alloc] init];
[ViewForDoneButtonOnKeyboard sizeToFit];
UIBarButtonItem *btnDoneOnKeyboard = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                               style:UIBarButtonItemStyleBordered target:self
                                                              action:@selector(doneBtnFromKeyboardClicked:)];
[ViewForDoneButtonOnKeyboard setItems:[NSArray arrayWithObjects:btnDoneOnKeyboard, nil]];

myTextField.inputAccessoryView = ViewForDoneButtonOnKeyboard;

完了ボタンのIBAction

 - (IBAction)doneBtnFromKeyboardClicked:(id)sender
  {
      NSLog(@"Done Button Clicked.");

      //Hide Keyboard by endEditing or Anything you want.
      [self.view endEditing:YES];
  }

SWIFT 3

var ViewForDoneButtonOnKeyboard = UIToolbar()
ViewForDoneButtonOnKeyboard.sizeToFit()
var btnDoneOnKeyboard = UIBarButtonItem(title: "Done", style: .bordered, target: self, action: #selector(self.doneBtnFromKeyboardClicked))
ViewForDoneButtonOnKeyboard.items = [btnDoneOnKeyboard]
myTextField.inputAccessoryView = ViewForDoneButtonOnKeyboard

働き

  @IBAction func doneBtnFromKeyboardClicked (sender: Any) {
     print("Done Button Clicked.")
    //Hide Keyboard by endEditing or Anything you want.
    self.view.endEditing(true)
  }
于 2016-08-19T11:44:20.743 に答える
11

Swiftバージョン:

ViewControllerの場合:

textField.returnKeyType = UIReturnKeyType.Done
textField.delegate = self

ViewControllerの後

extension MyViewController: UITextFieldDelegate {        
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}
于 2015-10-06T20:43:27.150 に答える
1

テキストフィールドのインスペクタの'Return Key'オプションの下にオプションを設定します。text field次に、テキストフィールドを右クリックし、CTRL選択を押しながら'Did End On Exit'これをファイルにドラッグしview controllersます。IBActionこれにより、メソッドが作成されます。メソッドに名前を付けてから、次の値を入力します。

[textField becomeFirstResponder];
[textField resignFirstResponder];

メソッドは次のようになります。

- (IBAction)methodName:(id)sender;
{
    [sender becomeFirstResponder];
    [sender resignFirstResponder];
}
于 2013-04-04T11:40:16.717 に答える
1

さて、私もこの問題に苦労しています。現在、UITableViewCellのUITextViewに(タグを介して)アクセスしています。プロトタイプセルを使用しているため、誰もが示唆しているようにIBActionsやIBOutletsを使用することはできません。代わりに、私は使用しています。

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replaceText:(NSString *)text

これにより、ユーザーがボタンを押すたびにテキストが表示されます。私の解決策は、改行のASCII文字を取得することでした。「/n」。それが入力されたテキストである場合、私はファーストレスポンダーを辞任します。例えば;

// If the text length is 0 then the user is deleting something, so only check the ascii character if there is text to check
if (text.length != 0) {
    // Get the Ascii character
    int asciiCode = [text characterAtIndex:0];
    // If the ascii code is /n or new line, then resign first responder
    if (asciiCode == 10) {
        [alertTextView resignFirstResponder];
        [DeviceTextView resignFirstResponder];
    }
}

他の誰かがこのハッキーなソリューションを必要とするかどうかはわかりませんが、誰かがそれを必要とする場合に備えて、私はそれをそこに置くと思いました!

于 2014-01-30T00:59:19.073 に答える
0

これは、キーボードに完了ボタンを追加するための最良の方法です

textField.returnKeyType = UIReturnKeyDone;
于 2016-07-04T12:47:35.550 に答える
0

以下は私のアプローチSwift 3です。doneBtnクリックすると、イベントを送信します.editingDidEndOnExit。このイベントを使用して、複数のtextField間のフォーカスの問題を処理します。

// My customized UITextField
class MyTextField: UITextField {

    override func awakeFromNib() {
        super.awakeFromNib()

        // Add toolBar when keyboardType in this set. 
        let set : [UIKeyboardType] = [.numberPad, .phonePad]
        if (set.contains(self.keyboardType) ) {
            self.addDoneToolbar()
        }
    }

    // Add a toolbar with a `Done` button
    func addDoneToolbar() {

        let toolbar = UIToolbar()
        let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
        let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(onToolBarDone))

        toolbar.items = [space, doneBtn]
        toolbar.sizeToFit()

        self.inputAccessoryView = toolbar
    }

    @objc func onToolBarDone() {
        // I use `editingDidEndOnExit` to simulate the `Done` behavior 
        // on the original keyboard.
        self.sendActions(for: .editingDidEndOnExit)
    }
}
于 2018-01-25T06:28:30.983 に答える
-2

textViewのプロパティのInterfaceBuilderで、戻るボタンのタイプをDoneに設定できます。

次に、を使用して戻るボタンがいつ押されたかを確認する必要があります

  - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

text == "/ n"であるかどうかを確認してから、textViewのファーストレスポンダーを辞任してキーボードを閉じます。

于 2012-04-09T17:36:15.393 に答える