#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
, по-прежнему равно нулю.