Как добавить кнопку "Готово" на клавиатуру?
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 на клавиатуру, чтобы ее можно было отклонить?
Ответы
Ответ 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", затем отпустите клавиатуру, отменив первый ответчик на вашем текстовом элементе.