IOS Superview и подпредставление - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть суперпредставление, и я добавляю подпредставление, чтобы сделать выбор.В суперпредставлении (основной вид) я делаю следующее: [self.view addSubview: cityViewController.view];

В cityView, когда я сделал то, что мне нужно, я просто делаю self.view.

Вопрос в том, как из суперпредставления я могу узнать, когда подпредставление удалило себя.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Есть несколько способов, но, если честно, текущий контроллер представления (давайте назовем его основным) просто добавляет представление cityViewController, сохраняет обработку добавления / удаления представлений к текущему контроллеру представления и простовызов главного контроллера [cityViewController.view removeFromSuperView]

Таким образом, вы можете выполнить любой код, который вы хотите, когда он получает это уведомление (будь то метод, который запускается или UINotification).

- редактироватьдля образца кода UINotification -

main.m

...
//Define cityViewController as an iVar and alloc/init it
[[UINotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishView:) name:@"DidFinishView" object:nil];
[self.view addSubview:cityViewController.view];
...

-(void) didFinishView:(NSNotification *)notification {
    [cityViewController.view removeFromSuperView];
}

CityViewController.m

-(IBAction) doneButtonClick:(id) sender {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DidFinishView" object:nil];
}
0 голосов
/ 10 ноября 2011

Быстрый ответ: ваш взгляд не должен сам себя удалять. Лучше практиковаться для представления взаимодействия пользователя с соответствующим контроллером через механизм межобъектного взаимодействия. Наиболее распространенными методами являются прямые сообщения, протоколы и уведомления. Платформа iOS использует все это, и есть отличные документы, объясняющие их. Вот краткое резюме:

  • Прямой обмен сообщениями. Используйте это, когда объект должен общаться с определенным объектом известного типа. Например, если MyView всегда содержится в MyViewController и ему необходимо отправлять на него сообщения, вы можете добавить свойство к классу MyView, которое хранит указатель на конкретный объект MyViewController. Затем вы можете отправить сообщение с myView на myViewController через [myView.myViewController userDidTapSaveButton] или любым другим.

  • Протоколы. Протокол определяет договор между объектами, которые ничего не знают друг о друге, кроме того, что они соблюдают договор. Например, UITableView знает, что его делегат соответствует протоколу UITableViewDelegate и может отправлять необходимые сообщения протокола своему делегату. Любой объект может соответствовать протоколу UITableViewDelegate.

  • Уведомления. Уведомления позволяют объекту публиковать уведомления через центральный механизм (NSNotificationCenter), который другие объекты могут наблюдать и отвечать на него. Уведомления полезны, когда объект, публикующий уведомление, не знает или не заботится о том, какие объекты наблюдают за его уведомлениями.

Я бы прочитал соответствующие документы и другие вопросы и ответы по SO об этих методах. Я также немного изучил бы шаблон проектирования MVC (модель / представление / контроллер), чтобы вам было удобнее знать, где разместить логику приложения. Как правило, представление должно отвечать только за его отображение (на основе свойств, установленных его контроллером), наблюдение / реагирование на действия пользователя и уведомление своего контроллера о соответствующих действиях.

...