Отклонить несколько модальных видов без контроллера навигации - PullRequest
3 голосов
/ 12 мая 2011

Я не планировал заранее правильную навигацию по представлениям в моем приложении, поэтому пользователь может пройти цикл, который просто накладывает модальные представления друг на друга, и оттуда корневой контроллер контроллеров доступен только через трудоемкий процесс ручного закрытия каждого повторного просмотра.

Я не могу просто пойти дальше и использовать popToRootViewControllerAnimated: без контроллера навигации поверх всего этого (вызов presetModalViewController:animated: неоднократно казался хорошей идеей в то время), поэтому, если что-то Google скрывает от меня, Я полностью потерян.

Переписать половину навигационного кода не идеально, но если это действительно единственный вариант, я попробую.
Избегать этого, безусловно, было бы предпочтительнее.

Не знаю, какой код будет полезен, если таковой имеется. Это просто представление / отклонение модальных контроллеров представления с несколькими подклассами UIViewController

Ответы [ 4 ]

2 голосов
/ 12 мая 2011

ответ A: простой ответ;

просто позвоните dismissModalViewController:animated: на вид, который вы хотите увидеть.

ответ B: реальный ответ;

Вам не составит труда переориентировать приложение Navigation Controller, я бы запустил новый проект, который представляет собой приложение Navigation, посмотрел на методы в делегате приложения и эмулировал это поведение.

тогда, когда вы обычно представляете, просто нажмите ([self.navigationController pushViewController: controller animated: YES]), и ваше отклонение станет популярным ([self.navigationController popViewControllerAnimated: YES])

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

1 голос
/ 12 мая 2011

Оба ответа @ Грейди правильные.Посмотрите документацию для -dismissModalViewController: animated: говорит вам:

Если вы представляете несколько контроллеров модального представления подряд и, таким образом, создаете стек контроллеров модального представления, вызываяэтот метод на контроллере представления ниже в стеке отклоняет его непосредственный дочерний контроллер представления и все контроллеры представления выше того дочернего в стеке.Когда это происходит, только самый верхний вид отклоняется в анимационном режиме;любые промежуточные контроллеры представления просто удаляются из стека.

Вы должны использовать -dismiss ... вместо извлечения контроллера из стека навигации, так как модальные контроллеры могут даже не быть частью стека навигации,Тем не менее, если вы обнаружите, что ваше приложение должно быть приложением на основе навигации, просто найдите время, чтобы сделать это.Если это большая работа, это, вероятно, работа, которую нужно сделать в любом случае.

0 голосов
/ 13 мая 2011

Хорошо, теперь я понял. Ниже строки то, что я никогда не должен был делать. Вместо того, чтобы пытаться содержать стек, выращенный в цикле, я должен был просто заблокировать его для начала.

То есть кнопка «Загрузить» больше не порождает другое представление. Вместо этого он отклоняет текущее представление, которое может быть только дочерним по отношению к представлению Load, создавая иллюзию нового представления и полностью устраняя проблему неконтролируемого роста стека.


Опять же, это неправильный вариант:

Глобальные, несколько #define строк и некоторые стеки if / else, и отсутствие контроллера навигации не является проблемой.

Если кому-то интересно, что я сделал для достижения этой цели (и / или насколько интересно будет изменить ее позже), я добавлю кое-что в этот ответ. Это не красиво и писать было больно (в основном потому, что новый код занимает четыре файла и тихо ломается), но он делает именно то, что я хочу.

0 голосов
/ 12 мая 2011

Изменение свойства представления в вашем UIViewController не работает?

...