Невозможно установить текстовое поле в качестве 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()
        }
    }
}
Другие вопросы по тегам