【问题标题】:Not able to set textfield as becomeFirstResponder() with textfield outlet collection in tvos无法将文本字段设置为 becomeFirstResponder() 与 tvos 中的文本字段插座集合
【发布时间】:2017-05-06 15:08:34
【问题描述】:

我拿了文本字段出口集合,并在那里绑定了六个文本字段。 我想成为文本字段出口集合中下一个文本字段的FirstResponder。 我从情节提要中给了文本字段标签 0 到 5。 看,

主视图控制器:

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
        }
}

错误:

谁的视图不在窗口层次结构中!

说明:

在此代码中,我无法将下一个文本字段变为 becomeFirstResponder。

谁能帮我解决这个问题。

【问题讨论】:

  • 您是否将文本字段作为子视图添加到您的视图中?你能显示故事板视图层次结构吗?
  • 不,我拿了文本字段的出口集合。

标签: ios swift swift3 tvos tvos10


【解决方案1】:

我试图重现您的错误,但没有成功。 查看故事板。 Xcode 版本 8.2。斯威夫特 3.

您能否提供更多详细信息,因为我只是复制粘贴了您的代码,它可以正常工作

【讨论】:

  • 最近我查了一下,我认为这个问题只发生在tv-os中。
【解决方案2】:

在 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()
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2016-09-06
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多