Невозможно установить текстовое поле в качестве comeFirstResponder() с выходной коллекцией текстового поля в tvos
Я взял коллекцию текстовых полей и связал там шесть текстовых полей. Я хочу стать первым ответчиком следующего текстового поля, которое находится в коллекции текстового поля. Я дал текстовые поля от 0 до 5 от раскадровки. увидеть,
Основной ViewController:
class ViewController: UIViewController {
@IBOutlet var txtSignUp: [UITextField]!
var arrayPlaceHolder:NSArray!
override func viewDidLoad() {
super.viewDidLoad()
arrayPlaceHolder = NSArray(array: ["1","2","3","4","5","6"])
self.setTextFieldValue()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
private func setTextFieldValue(){
for txtField in txtSignUp{
let tagTxt = txtField.tag
txtField.attributedPlaceholder = NSAttributedString(string:arrayPlaceHolder[tagTxt] as! String, attributes:[NSForegroundColorAttributeName:UIColor.black])
if(tagTxt != ((arrayPlaceHolder.count) - 1)){
txtField.returnKeyType = .next
}
txtField.delegate = self
}
}
}
extension ViewController:UITextFieldDelegate{
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
for txt in txtSignUp{
let nextTxt = (textField.tag + 1)
if txt.tag == nextTxt {
txt.becomeFirstResponder()
break
}
}
return true
}
}
Ошибка:
чей вид не в иерархии окон!
Объяснение:
В этом коде я не могу стать следующим текстовым полем, как становиться FirstResponder.
Может ли кто-нибудь помочь мне решить эту проблему.
2 ответа
Я пытался воспроизвести вашу ошибку, но не удалось. Проверьте раскадровку. Версия Xcode 8.2. Свифт 3.
Можете ли вы предоставить более подробную информацию, потому что я просто скопировал вставил ваш код, и он отлично работает
На TVos вы должны использовать функцию textFieldDidEndEditing, потому что textFieldShouldReturn не будет работать для установки следующего респондента:
class MyViewController: UIViewController{
@IBOutlet weak var firstTextField: UITextField!
@IBOutlet weak var secondTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
firstTextField.delegate = self
secondTextField.delegate = self
firstTextField.tag = 0
secondTextField.tag = 1
}
}
extension MyViewController: UITextFieldDelegate {
func textFieldDidEndEditing(_ textField: UITextField) {
if (textField.tag == 0){
secondTextField.becomeFirstResponder()
}
}
}