Ответ 1
Для тех, кто хочет показать клавиатуру без UITextField
/UITextView
по некоторым причинам, может легко расширить некоторое представление, которое требует ввода текста, реализуя протокол UIKeyInput
и canBecomeFirstResponder
.
Я работаю в приложении для обмена сообщениями на iPhone.
Я хочу показать клавиатуру с клавиатурой inputAccessoryView
на клавиатуре без использования UITextView
и UITextField
. Это можно сделать? Пожалуйста, помогите мне в этом.
Спасибо заранее. С нетерпением ждем вашей помощи. Спасибо.
EDIT:
Потому что я не хочу, чтобы UITextField
/UITextView
и элемент управления находился в UITextView
/UITextField
. Я собираюсь добавить inputAccessoryView
на клавиатуре UITextView
. когда пользователь коснется UITextView
на клавиатуре inputView
, фактический процесс будет продолжен.
Для тех, кто хочет показать клавиатуру без UITextField
/UITextView
по некоторым причинам, может легко расширить некоторое представление, которое требует ввода текста, реализуя протокол UIKeyInput
и canBecomeFirstResponder
.
Смотрите документацию для этого:
Все, что вам нужно сделать, - это реализовать свое представление UIKeyInput
и вызвать [inputView becomeFirstResponder]
при касании. Ваше представление также должно реализовать canBecomeFirstResponder
и вернуть YES.
Вы можете попробовать ответы на этих других сообщениях SO:
Вы также можете попробовать это:
UIKeyboard *keyboard = [[[UIKeyboard alloc] initWithFrame: CGRectMake(0.0f, contentRect.size.height - 216.0f, contentRect.size.width, 216.0f)] autorelease];
[keyboard setReturnKeyEnabled:NO];
[keyboard setTapDelegate:editingTextView];
[inputView addSubview:keyboard];
Иногда клавиатура не отображается, потому что программная клавиатура выключена. Перейти к оборудованию → Клавиатура → Переключить клавиатуру 👌
Я сделал небольшой файл утилиты, который может вызвать клавиатуру с текстовым полем при нажатии кнопки!
Сделайте View, Label или что-либо еще, чтобы соответствовать UIKeyInput. В этом случае UIView
Подкласс UIView:
import UIKit
class KeyInputView: UIView {
var _inputView: UIView?
override var canBecomeFirstResponder: Bool { return true }
override var canResignFirstResponder: Bool { return true }
override var inputView: UIView? {
set { _inputView = newValue }
get { return _inputView }
}
}
// MARK: - UIKeyInput
//Modify if need more functionality
extension KeyInputView: UIKeyInput {
var hasText: Bool { return false }
func insertText(_ text: String) {}
func deleteBackward() {}
}
Настройте свой View, в этом случае с помощью средства выбора (в viewDidLoad или где-либо еще)
let languangePicker = UIPickerView()
languangePicker.dataSource = self
languangePicker.delegate = self
keyInputView.inputView = languangePicker
Показывать:
keyInputView.becomeFirstResponder()
Прятаться:
keyInputView.resignFirstResponder()
Установить данные выбора из источника данных (компилятор заставит вас это сделать)
Захватывать события выбора данных от делегата