it-swarm.com.ru

Как добавить кнопку "Готово" на клавиатуре?

Обновление:

Я также попытался реализовать UITextViewDelegate делегат, а затем сделал в моем контроллере:

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

Я также установил, что делегатом текстового представления является self (экземпляр представления контроллера).

Нажатие кнопки «Готово» по-прежнему вставляет только новую строку :(


Обновление:

Что я сделал до сих пор. Я реализовал UITextFieldDelegate моим контроллером представления.

Я подключил текстовое представление к контроллеру представления через выход.

Тогда я сделал:


self.myTextView.delegate = self;

А также:

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

Но когда я нажимаю кнопку «Готово», он просто добавляет новую строку.

Итак, у меня есть элемент UITextView на моей сцене, и когда пользователь касается его, появляется клавиатура, и ее можно редактировать.

Однако я не могу отмахнуться от клавиатуры.

Как добавить кнопку «Готово» на клавиатуре, чтобы ее можно было закрыть?

49
Richard Knop

это довольно просто :)

[textField setReturnKeyType:UIReturnKeyDone];

для отклонения клавиатуры реализуйте протокол <UITextFieldDelegate> в своем классе, установите

textfield.delegate = self;

и использовать 

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

или же

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}
115
Sebastian Flückiger

Зайдите в свою раскадровку, выберите текстовое поле, и в Инспекторе атрибутов есть опция, которая говорит «ключ возврата» ... выберите «Готово».

Затем перейдите в свой ViewController и добавьте:

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

Затем вернитесь к своему текстовому полю, нажмите выходы и ссылку «Закончилось ли при выходе», чтобы отменить действие Keyboard.

16
Mike Z

Добавить UIToolBar в качестве пользовательского представления, в котором кнопка Done будет иметь вид UIBarButtonItem.

Это более безопасный и чистый способ добавить кнопку «Готово» на клавиатуру любого типа. Создайте UIToolBar, добавьте кнопку «Готово» к нему и установите inputAccessoryView любого UITextField или UITextView.

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 For Done

 - (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)
  }
13
ViJay Avhad

Swift версия:

В вашем ViewController:

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

После вашего ViewController

extension MyViewController: UITextFieldDelegate {        
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}
10
Esqarrouth

Итак, я тоже боролся с этой самой проблемой. В настоящее время я обращаюсь к UITextView в UITableViewCell (через теги). Поскольку я использую прототип клетки, я не могу использовать IBActions или IBOutlets, как все предлагают. Вместо этого я использую;

- (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) диапазон replaceText: (NSString *) текст

Это будет предоставлять мне текст каждый раз, когда пользователь нажимает кнопку. Тогда я решил получить символ ascii для новой строки; "/ П". Если это был введенный текст, я бы уволил первого ответчика. Например;

// 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];
    }
}

Не уверен, что кому-то еще понадобится это хакерское решение, но я подумал, что выложу его на всякий случай!

1
Donato Perconti

Установите параметр 'Return Key' под параметром text field в инспекторе для вашего текстового поля . Затем щелкните правой кнопкой мыши на текстовом поле и, удерживая CTRL, выберите 'Did End On Exit' и перетащите его в свой файл view controllers. Это создаст метод IBAction. Дайте методу имя, а затем введите следующие значения:

[textField becomeFirstResponder];
[textField resignFirstResponder];

Ваш метод должен выглядеть так:

- (IBAction)methodName:(id)sender;
{
    [sender becomeFirstResponder];
    [sender resignFirstResponder];
}
1
Garreth Golding

Ниже мой подход, в Swift 3. Когда нажата doneBtn, пусть отправит событие .editingDidEndOnExit. Я использую это событие для обработки проблемы фокуса между несколькими текстовыми полями.

// 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)
    }
}
0
AechoLiu

Это лучший способ добавить кнопку «Готово» на клавиатуре.

textField.returnKeyType = UIReturnKeyDone;
0
DURGESH Chaurasiya