Как я могу открыть новый вид из фонового потока, не зная, что такое текущий / основной вид? - PullRequest
0 голосов
/ 22 февраля 2011

Из того, что я понимаю, у любого нового открытого представления должен быть родительский / супер-вид.

У меня есть фоновый поток, который связывается с сервером, и в соответствии с ответом сервера он должен выдать предупреждениеи в ответ на это предупреждение он должен вызвать некоторый пользовательский интерфейс.Это может произойти «где угодно» в моем приложении, и поэтому мне трудно предоставить этому новому представлению родительский / суперпредставление.

Можно ли открыть это новое представление, не зная, что отображается в данный момент?Есть ли ненавязчивый способ обнаружить текущий вид и использовать его как родительский / супер?

Одна из целей - не требовать ничего от делегата и других представлений.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

На самом деле вам не нужно представление, вы можете добавить его как подпредставление окна делегата вашего приложения.

В вашей заявке делегат:

- (void) showView {
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
    view.backgroundColor = [UIColor redColor ];
    [self.window addSubview:view];
    [view release];
}

Затем, когда вы хотите показать вид:

MyAppDelegate *d = [[UIApplication sharedApplication] delegate];
[d showView];

Вам понадобится способ отклонить представление, как только вы закончите с ним, вы можете использовать

[self removeFromSuperview]
0 голосов
/ 22 февраля 2011

Способ получения видимого в данный момент вида зависит от настройки контроллеров, например. используете ли вы панель вкладок, контроллер навигации и т. д. Я думаю, что самый простой способ был бы, если бы ваш фоновый поток отправлял уведомление (используя NSNotificationCenter) в основной поток всякий раз, когда вам нужно, чтобы изменения пользовательского интерфейса произошли. Затем контроллеры представления могут подписаться на это уведомление и обрабатывать изменения пользовательского интерфейса.

Уведомления - это всего лишь один из способов коммуникации, хотя в основном вам нужно, чтобы фоновый поток вашей модели как-то сообщал о текущем активном контроллере представления в вашем основном потоке. Как именно вы это решите, во многом будет зависеть от вашего заявления (см. Первое предложение снова).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...