Я разрабатываю приложение для iOS, и я хочу это, когда клавиша Return нажимается в моем iPhone, это направляет меня к следующему следующему текстовому полю.
Я нашел несколько подобных вопросов с превосходными ответами вокруг, но они все просто, оказывается, находятся в Objective C, и я ищу SWIFT-код, теперь это - то, что я имею вплоть до сих пор:
func textFieldShouldReturn(emaillabel: UITextField) -> Bool{
return true
}
Это помещается в файл, это подключено и контроллер к UIView, который содержит текстовые поля, но я не уверен, является ли это правильным местом.
Я в основном плохо знаком с Swift, поэтому объясните каждый небольшой шаг, или мне удастся испортить его так или иначе. Также я использую последнюю версию XCode, если это имеет какое-либо значение.
Хорошо, таким образом, я испытал это и получил эту ошибку:
//could not find an overload for '!=' that accepts the supplied arguments
func textFieldShouldReturn(textField: UITextField) -> Bool {
let nextTag: NSInteger = textField.tag + 1
// Try to find next responder
let nextResponder: UIResponder = textField.superview!.viewWithTag(nextTag)!
if (nextResponder != nil) {
// could not find an overload for '!=' that accepts the supplied arguments
// Found next responder, so set it.
nextResponder.becomeFirstResponder()
} else {
// Not found, so remove keyboard.
textField.resignFirstResponder()
}
return false // We do not want UITextField to insert line-breaks.
}
Заранее спасибо приятели!
У меня есть хорошее решение для Вашего вопроса.
ШАГ:
1 - Набор Ваша клавиша Return от раскадровки.
2 - В Вашем быстром файле.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField.returnKeyType == .next {
Email.resignFirstResponder()
Password.becomeFirstResponder()
} else if textField.returnKeyType == .go {
Password.resignFirstResponder()
self.Login_Action()
}
return true
}
3 - не забывают устанавливать делегата Текстового поля.
Спасибо :)
Если у Вас есть много компонентов текстового поля, мои - это, могло бы быть лучше использовать набор выхода, связав текстовые поля и установив клавишу Return от интерфейсного разработчика
@IBOutlet var formTextFields: [UITextField]!
override func viewDidLoad() {
for textField in formTextFields {
textField.delegate = self
}
}
extension RegisterViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if let componentIndex = formTextFields.firstIndex(of: textField) {
if textField.returnKeyType == .next,
componentIndex < (formTextFields.count - 1) {
formTextFields[componentIndex + 1].becomeFirstResponder()
} else {
textField.resignFirstResponder()
}
}
return true
}
}
Swift / Программно
class MyViewController: UIViewController, UITextFieldDelegate {
let textFieldA = UITextField()
let textFieldB = UITextField()
let textFieldC = UITextField()
let textFieldD = UITextField()
var textFields: [UITextField] {
return [textFieldA, textFieldB, textFieldC, textFieldD]
}
override func viewDidLoad() {
// layout textfields somewhere
// then set delegate
textFields.forEach { [110].delegate = self }
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if let selectedTextFieldIndex = textFields.firstIndex(of: textField), selectedTextFieldIndex < textFields.count - 1 {
textFields[selectedTextFieldIndex + 1].becomeFirstResponder()
} else {
view.endEditing(true) // last textfield, dismiss keyboard directly
}
return true
}
}
Swift 4.2
Это [еще 114] Дженерик и Самым Легким Решение, можно использовать этот код с любым количеством TextFields. Просто наследуйте UITextFieldDelegate и обновите Тег Текстового поля согласно порядку и скопируйте эту функцию
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
let txtTag:Int = textField.tag
if let textFieldNxt = self.view.viewWithTag(txtTag+1) as? UITextField {
textFieldNxt.becomeFirstResponder()
}else{
textField.resignFirstResponder()
}
return true
}