UITextField inputView не работает в Swift

Я пытаюсь установить inputView & inputAccessoryView за UITextField, Но, когда я начинаю нажимать только на textField inputAccessoryView это снизу.

Ниже приведен мой код:

@IBOutlet weak var pickerView: UIPickerView!
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var toolBar: UIToolbar!

override func viewDidLoad() {
    super.viewDidLoad()
    self.textField.inputView = self.pickerView;
    self.textField.inputAccessoryView = self.toolBar;
}

Заранее спасибо.

5 ответов

Решение

Я был очень удивлен, когда увидел такую ​​ошибку! Ваш код выглядит на 100% действительным и должен работать. Я даже создал небольшой проект, чтобы воспроизвести проблему. И удалось с размножением.

Итак, мои шаги были:

  1. Создайте простой проект с UITextView в Xib, который создается в application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!), Запустите и увидите, что клавиатура по умолчанию отображается.

  2. Добавьте еще два представления в Xib и подключите их к MyViewController. И установить inputView а также accessoryInputView в viewDidLoad как ты.

  3. Запустите и увидите проблему.

Ответ начинается здесь:

Затем я просто сбросил эмулятор, почистил папку сборки и снова запустил код. И все заработало как положено!

Это выглядит для меня как ошибка с xCode или эмулятором (или может быть и тем и другим), но я не могу сказать, кто виноват и почему.

Снимок экрана (вид с помощью кнопок - моя клавиатура:)

Так что ответ гораздо проще, получается. Если вы используете аппаратную клавиатуру вместо программной клавиатуры, симулятор включит настройку "Подключить аппаратную клавиатуру", и вы больше не получите программную клавиатуру. Причина, по которой предлагаемый сброс вашего симулятора работает, заключается в том, что он также сбрасывает этот параметр. Если вы не хотите делать полный сброс, просто выключите аппаратную клавиатуру, выполнив:

Оборудование -> Клавиатура -> и убедитесь, что "Подключить аппаратную клавиатуру" не отмечено

Как отключить аппаратную клавиатуру для симулятора

Вы можете создавать эти представления программно.

weak var pickerView: UIPickerView!
weak var toolBar: UIToolbar!
@IBOutlet weak var textField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    var picker = UIPickerView()
    picker.delegate = self
    picker.dataSource = self
    self.pickerView = picker
    self.textField.inputView = pickerView

    var toolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 44))

    var item = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done,
        target: self, action: "doneAction")

    toolbar.setItems([item], animated: true)
    self.textField.inputAccessoryView = toolbar
    self.toolBar = toolbar
}

func doneAction() {
    self.textField.resignFirstResponder()
    println("done!")
}

Это сработало для меня, потому что установка inputView добавила представление в раскадровку, но ни один из параметров внешнего вида не сработал, и viewDidLoad() не вызывался.

self.inputText?.inputViewController?.view.addSubview(self.basicKeyboard) self.inputText!.inputView = self.basicKeyboard self.inputText!.inputAccessoryView = nil

  1. Убедитесь, что вы переопределите canBecomeFirstResponder на ваш взгляд контроллер и верните истину. (По умолчанию установлено значение false)
  2. Переопределить inputAccessoryView свойство в вашем контроллере представления и вернуть представление по вашему выбору. ВНИМАНИЕ: Убедитесь, что вы удалили его из суперпредставления, прежде чем вернуть его. (Но это может быть вид, созданный в IB и связанный через выход)
Другие вопросы по тегам