Подтвердить что ты не робот

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

UPDATE:

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

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

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

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


UPDATE:

То, что я сделал до сих пор. Я выполнил UITextFieldDelegate с помощью моего контроллера представления.

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

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


self.myTextView.delegate = self;

и

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

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

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

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

Как я могу добавить кнопку Done на клавиатуру, чтобы ее можно было отклонить?

4b9b3361

Ответ 1

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

[textField setReturnKeyType:UIReturnKeyDone];

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

textfield.delegate = self;

и используйте

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

или

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

Ответ 2

Перейдите в свою раскадровку, выберите свое текстовое поле, и в разделе "Инспектор атрибутов" появится опция "return key"... выберите "Done".

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

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

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

Ответ 3

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

Это более безопасный и чистый способ добавления кнопки "Готово" к любому типу клавиатуры. Создайте UIToolBar, добавив к нему кнопку Done, и установите 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 для кнопки "Готово"

 - (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)
  }

Ответ 4

Быстрая версия:

В вашем ViewController:

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

После просмотра ViewController

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

Ответ 5

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

[textField becomeFirstResponder];
[textField resignFirstResponder];

Ваш метод должен выглядеть следующим образом:

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

Ответ 6

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

- (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replacementText: (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];
    }
}

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

Ответ 7

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

textField.returnKeyType = UIReturnKeyDone;

Ответ 8

В Interface Builder по свойствам textView вы можете установить тип кнопки возврата в Done.

Затем вам нужно проверить, нажата ли кнопка возврата с помощью

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

Проверьте, если текст == "/n", затем отпустите клавиатуру, отменив первый ответчик на вашем текстовом элементе.