Убедитесь, что ваши текстовые поля имеют свой набор делегатов и реализуют метод textFieldShouldReturn
. Это метод, который вызывается, когда пользователь удаляет ключ возврата (независимо от того, как он выглядит).
метод может выглядеть следующим образом:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.field1 {
self.field2.becomeFirstResponder()
}
return true
}
Фактическая логика здесь может меняться. Есть множество подходов, и я бы определенно советовал против массивной сети if
/else
, если у вас много текстовых полей, но суть в том, чтобы определить, какой вид в данный момент активен, чтобы определить, какой вид должен стать активным. После того, как вы определили, какой вид должен стать активным, вызовите этот метод вида becomeFirstResponder
.
Для некоторых чистоты кода, вы могли бы рассмотреть UITextField
расширение, которое выглядит примерно так:
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
}
}
}
А затем изменить наш textFieldShouldReturn
способ выглядеть следующим образом:
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.nextField?.becomeFirstResponder()
return true
}
После вы сделали это, это просто вопрос настройки нового свойства нового текстового поля nextField
в viewDidLoad
:
self.field1.nextField = self.field2
self.field2.nextField = self.field3
self.field3.nextField = self.field4
self.field4.nextField = self.field1
Хотя, если мы действительно хотим, мы могли бы предварить собственность с @IBOutlet
, и что позволит нам подключить наш «nextField» право собственности в интерфейсе строителя.
Измените расширение выглядеть следующим образом:
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
@IBOutlet var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
}
}
}
А теперь подключить к nextField
свойство в интерфейсе строителя:
(Настройка вашего делегата в то время как вы здесь .)
И из co urse, если свойство nextField
возвращает nil
, клавиатура просто скрывается.
Где разместить код расширения в файле? –
Везде. Я бы сделал для него новый файл. – nhgrif
Я продолжаю получать сообщение об ошибке с расширением. Он говорит, что это объявление действует только в источнике файла. –