Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(Bitter @ 4.10.2012,  00:07)
В Вашем описании сам черт не разберет что Вы имели в виду

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
Цитата(Bitter @ 4.10.2012,  13:04)
Ваша схема напоминает выкидыш младенца.
Во-первых объект segue имеет тип, это может быть push или modal или другие типы, что вы там используете известно только вам и Иисусу
Дальше, что значит вот эта часть?
Master2
    |
    |---------------Detail2

и каким боком к этому всему относится тулбар?

Какая разница какое сегвей если проблем с сегвеем нет?
Естественно при замене мастеров сегвей - пуш
А тип сегвея от мастера к детейл  - реплейс

Тулбар находится у вьюшки Детейл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
Цитата(Bitter @ 4.10.2012,  16:26)
если вы добавляете спинер в детэил1, то почему он должен быть виден в дитэил2?

ок, еще раз:
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
Цитата(cosamia @  5.10.2012,  02:00 Найти цитируемый пост)
в  prepareForSegue он вызывался для детейл1

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)