UIWindow UIView addSubview проблема - PullRequest
       15

UIWindow UIView addSubview проблема

2 голосов
/ 25 сентября 2011

Каждый видеоурок и книга, которые я прочитал, отображают следующий код для добавления UIView в UIWindow.

[window addSubview: self.viewController.view];

Мое пониманиеПриведенный выше код заключается в том, что «Вид» (который является экземпляром UIView) добавляется в окно (которое является экземпляром UIWindow).Позвольте мне разбить его (в соответствии с моим пониманием):

window (UIWindow) addSubview (метод для добавления View в окно) Self.viewController.view (просто возвращает экземпляр «view», который являетсяуже создан в классе UIViewController.

Первая проблема, с которой я столкнулся, заключается в том, что я не смог найти метод addSubview в справочном документе класса UIWindow на сайте apple. Однако кто-то любезно указал мне, что UIWindow наследует addubviewметод из UIView. Это все хорошо, но почему все книги и онлайн-документы утверждают, что метод addubview добавляет представление в окно - но как это может быть? действительно запутано. Может кто-нибудь, пожалуйста, объясните шаг за шагом, что делает этот код«Если UIWindow наследует метод addubview в UIView, то как он может вернуться в дерево наследования? Действительно потерян. Что мне действительно нужно, так это небольшой пример кода с диаграммами того, что происходит шаг за шагом. ДЕЙСТВИТЕЛЬНО было бы здорово. Большое спасибо

Ответы [ 3 ]

2 голосов
/ 25 сентября 2011

Думайте об окне как о виде, который напрямую связан с экраном или рисованным объектом.

В приведенном выше примере window.view не является правильным. окно не содержит представление, это представление с дополнительным поведением.

Предполагая, что вы загружаете UIViewController из файла NIB, представление, связанное с viewController, будет создано при доступе к представлению. Итак ...

Вы можете увидеть код, подобный

MyViewController *vc = [MyViewController alloc]initWithNibName:@"MyNibFile" bundle:nil]autorelease];
[window addSubView:vc.view];
[window makeKeyAndVisible];

Представление - это просто суперкласс Window, поэтому вам доступен любой метод публичного просмотра.

Обычно окно в вашем объекте AppDelegate создается при загрузке файла MainWindow.xib.

Вы должны увидеть что-то вроде

@property(nonatomic, retain) IBOutlet UIWindow *window;

в вашем заголовочном файле AppDelegate. (Директива IBOutlet указывает инициализировать объект окна при загрузке файла пера.

Просто запомните, UIWindow - это просто UIView с дополнительным поведением и данными.

Надеюсь, это поможет.

0 голосов
/ 25 сентября 2011

"Однако кто-то любезно указал мне, что UIWindow наследует метод addubview от UIView. Это нормально, но почему все книги и онлайн-документы утверждают, что метод addubview добавляет представление в окно - но как это может быть? действительно сбит с толку. Может кто-нибудь объяснить, пожалуйста, шаг за шагом, что делает этот код? Если UIWindow наследует метод addubview UIView, то как он может вернуться к дереву наследования? "

Вот и все. Я думаю, что вы не понимаете, что такое наследство. Метафора "это". UIWindow "является" UIView. Он имеет все, что имеет UIView, и многое другое. У UIView есть одна возможность - добавить Subview. Поэтому UIWindow также обладает такой способностью. Для этого не нужно никакого другого UIView. Это это UIView. Он может сделать это сам.

0 голосов
/ 25 сентября 2011

попробуй

[window.view addSubview:self.viewController.view];

Это не в моей голове, поэтому может быть не совсем точным.

...