Swift 5 UIView не имеет UIResponder

#ios #swift #uiview #uiviewcontroller #uiresponder

Вопрос:

Вот пример исходного кода:

Контроллер просмотра:

 class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view = Home()
    }

}
 

Главная

 class Home: UIView {
    ...
    func parent() -> UIViewController {
        var responder: UIResponder? = self.next
        while responder != nil {
            if let c = responder as? UIViewController { return c }
            else { responder = responder?.next }
        }
        return nil
    }
}
 

Для линии

 var responder: UIResponder? = self.next
 

Значение responder всегда равно нулю, что я не могу получить ViewController.

Что-то странное в том, что у меня нет проблем с одной и той же функцией для всех подвидов Home .

Комментарии:

1. Смотрите документ next , часть обсуждения: For example, UIView implements this method and returns the UIViewController object that manages it (if it has one) or its superview (if it doesn’t). . Так что для его подвидов это нормально, так как по умолчанию будет их супервизор. Теперь мне интересно, как он узнает, что такое ViewController представления… Может ли быть проблема в этом?

2. Я не могу воспроизвести это. Когда ты звонишь parent() ?

3. @Sweeper Я пытался добавить navigationItem в родительский контроллер, когда init() Home представление.

4. @Larme Временно я пропустил эту проблему, передав ViewController конструктор self » s в Home «, и он работает нормально. Однако мне интересно, почему то next , что должно быть ViewController , по-прежнему равно нулю.