| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > iOS > Копирование ViewControllerов и плохой результат |
| Автор: cosamia 3.10.2012, 22:12 |
| Структура storyboard следующая: splitViewController где к detail подключен detailVC1 а к мастеру master1 master1 меняется на master2 и мастер2 должен отобразить новый результат на detail master2 нельзя подключить через segue на detailVC1 - вообще не будет работать Поэтому создан клон detailVC1 который условно будем называть detailVC2 и соответственно мастер2 имеет сегвей на этот детейл2 Тут все работает, однако есть странная проблема: пока детейл1 выполняет обработку, в toolBar отображется ActivityIndicatorView однако когда детейл2 выполняет обработку в toolBar ничего не отображается хотя property на этот ActivityIndicatorView не нулевое У меня впечатление что этот индикатор работает в detail1 хотя на экране detail2 (они оба наследуются от одного VC) И вот тут моих знаний не достаточно как уладить эту ситуацию |
| Автор: Bitter 4.10.2012, 00:07 |
| В Вашем описании сам черт не разберет что Вы имели в виду |
| Автор: Maksys 4.10.2012, 07:55 |
| Скажите себе: "Все должно быть проще!!!". И ищите варианты. |
| Автор: cosamia 4.10.2012, 09:08 | ||
splitVC ----navigationC ---S1--> Master1---S2--->Master2 | | | |---------------Detail2 | ----------Detail1 Detail1: MyDetailVC1 Detail2: MyDetailVC1 |
| Автор: Bitter 4.10.2012, 13:04 |
| Ваша схема напоминает выкидыш младенца. Во-первых объект segue имеет тип, это может быть push или modal или другие типы, что вы там используете известно только вам и Иисусу Дальше, что значит вот эта часть? Master2 | |---------------Detail2 и каким боком к этому всему относится тулбар? |
| Автор: cosamia 4.10.2012, 15:04 | ||
Какая разница какое сегвей если проблем с сегвеем нет? Естественно при замене мастеров сегвей - пуш А тип сегвея от мастера к детейл - реплейс Тулбар находится у вьюшки Детейл1 (Детейл2 - копия Детейл1) Мастер2---Детейл2 означает связь на вьюшке между мастер2 и детейл2 через сегвей типа реплейс Проблема как я описал выше состоит в том, что спиннер сейчас добавляется только в Детейл1 Однако если мастер1 будет заменен на мастер2 то при вызове сегвея с мастер2 на детейл2 спиннер не появляется в детейл2 Добавлено через 1 минуту и 10 секунд Схема нарисованная выше - то что видно на сторибоард В данном случае изображение текстовое а не графическое |
| Автор: Bitter 4.10.2012, 16:26 |
| если вы добавляете спинер в детэил1, то почему он должен быть виден в дитэил2? |
| Автор: cosamia 4.10.2012, 18:56 | ||
ок, еще раз: detail1, detail2 - идентичны detail1: MyDetailVC detail2: MyDetailVC спиннер добавляется исключительно программно в toolbar иными словами контроллер MyDetailVC где и происходит добавление не знает в кого он добавляет в detail1 или detail2 -ему без разницы А кого показать сейчас - detail1 или detail2 определяет segue |
| Автор: Bitter 4.10.2012, 21:29 |
| я правильно понимаю, что тулбар находится в каждом из дитэйлов? и соответственно спинер добавляется в свой тулбар. В каком месте добавляете и как? Пробовали спинер поставить сразу в сторибоарде? |
| Автор: cosamia 4.10.2012, 23:00 |
| toolbar имеется в каждой вьюшке тк вьюшки абсолютно идентичны добавляю спиннер кодом: UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.iPadSpinner = activityView; [activityView startAnimating]; activityView.hidesWhenStopped = YES; UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:activityView]; [toolBarItems addObject:item]; В случае с detail2 в prepareForSegue вызываю метод который выполняет добавление спинера те перед тем как загрузить детейл2 вызываю метод проверял - метод вызывается и проперти iPadSpinner не нулевое Есть подозрение что тк метод вызван из prepareforsegue то действие происходит в детейл1 а не детейл2 Однако не уверен как сделать так чтобы точно знать что вызвано будет после сегвея, вариант с viewDidAppear мне не нравится как-то Пробовал в детейл2 добавить контрол спиннер однако почему-то он на детейл2 не отображается когда прога работает Пробовал заменить на детейл2 спиннер на свитч - ради теста, свитч отображается а спиннер нет! Хрень какая-то Добавлено через 8 минут и 32 секунды Короче добавил этот код в ViewDidLoad и оказалось что я был прав - в prepareForSegue он вызывался для детейл1 сейчас он вызывается и для детейл2 вроде стало работать но нет уверенности что это правильный подход |
| Автор: Maksys 8.10.2012, 08:11 |
Мне кажется сигвей вызывается не для кого-то, а по индентификатору, а там уже видно кто его вызвал и для кого. Но я могу ошибаться. |