Как UIView nextResponder узнает, что такое UIViewController?

Управление версиями сохраняет историю измененных, и большинство систем управления версиями только хранит различие между двумя версиями, не всем. Резервные копии хранят все, и у них нет истории, если Вы не делаете это вручную. Резервные копии обычно неэффективны. Однако системы управления версиями не очень эффективны с двоичными файлами.

13
задан Csabi 11 March 2011 в 11:07
поделиться

2 ответа

The responder chain is separate from the view hierarchy. The responder chain might look like this:

First Responder > View Hierarchy > Window > Window Delegate > etc...

However, objects can insert themselves into the responder chain and that's what UIViewController does. From the docs:

Because view controllers are tightly bound to the views they manage, they are also part of the responder chain used to handle events. View controllers are themselves descendants of the UIResponder class and are inserted into the responder chain between the managed view and its superview.

In Big Cocoa, this is accomplished using the -setNextResponder: method. That method isn't public in Cocoa Touch, but nevertheless that's what UIViewController appears to do.

8
ответ дан 2 December 2019 в 01:11
поделиться

Я предполагаю, что система может поддерживать отображение между объектами UIViewController и их корневыми объектами UIView . Код для обхода цепочки респондента может использовать это сопоставление для передачи события соответствующему объекту UIViewController.

Обычно подвиды добавляются с использованием:

subview = [viewController view]

[superview addSubview subview]

Метод addSubview автоматически устанавливает superview в качестве следующего респондента для subview, так что:

a) viewController не будет иметь возможности вставлять себя между superview и subview.

b) viewController делает не знает о супервизоре, следовательно, он не может установить его в качестве следующего респондента.

c) Apple рекомендует, чтобы представление не могло совместно использоваться контроллерами. В отсутствие многопоточности это ограничение имеет смысл только при наличии карты представлений и контроллеров представлений.

0
ответ дан 2 December 2019 в 01:11
поделиться