Кнопка «Назад» возвращает к другому UITableViewController, откуда он появился - PullRequest
1 голос
/ 22 января 2010

Допустим, у меня есть UITableViewController A и UITableViewController B. И A, и B загружают UIView C. На кнопке «Назад» в C, как мне убедиться, что она всегда возвращается к B, а не откуда она взялась?

Вот конкретный пример: A = окно контактов в скайпе iphone. B = окно чатов, каждая строка - это история чата с другим человеком C = окно чата отображает разговор с тем же человеком.

C можно загрузить из A или B, но я хочу, чтобы кнопка в окне чата (C) возвращалась только к окну чатов (B).

Приветствие.

Ответы [ 4 ]

2 голосов
/ 22 января 2010

Вам будет сложно реализовать это во многом потому, что это плохой дизайн пользовательского интерфейса и API не поддерживает его.

Ваш пользователь будет ожидать, что кнопка «Назад» возвратит их «назад» к предыдущему виду, как и в любом другом приложении, которое они используют. Переход к любому другому представлению еще больше запутает их, потому что это не иерархия, а цикл. Иногда пользователи переходят на B -> C -> B, но в других случаях A -> C -> B -> C. (Как они возвращаются к А?)

Вместо кнопки «Назад» в C у вас должна быть кнопка справа, которая всегда переводит вас в B независимо от того, как вы попали в C. Одна и та же кнопка в одном и том же контексте всегда должна давать один и тот же результат. Пользователи не должны помнить, в каком невидимом режиме они находятся, чтобы предсказать, какое действие будет иметь кнопка.


Edit01: (Ответ на комментарии ниже)

(Это все с моей головы, так что возьмите его с крошкой соли.) Вам нужно будет отказаться от использования контроллера навигации и вместо этого управлять представлениями самостоятельно. Вам нужно будет поменять представления через панель вкладок, заменив представление C на представления A и B в свойстве представления каждой вкладки.

Я думаю, вам придется начать с основного вида, который невидим, а затем добавить к нему панель вкладок. В главном контроллере представления создайте атрибуты / выходы для каждого представления. В каждом представлении есть атрибут / выход, связанный с главным контроллером представления. Затем используйте «кнопку назад» (которую я настоятельно рекомендую вам обозначить как «Чаты») метода вызова представления C в A и B, который затем вызывает метод в главном контроллере представления, который (1) удаляет представление C из вкладки A или вкладка B (2) переключает вкладку на вкладку B, а затем (3) загружает представление B на вкладку B.

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

Для сравнения посмотрите, как приложение для телефона обрабатывает ту же ситуацию. Независимо от того, какую вкладку вы используете для совершения вызова, избранных, контактов, клавиатуры и т. Д., Вы все равно вернетесь к представлению этой вкладки после завершения вызова. Если вы хотите сделать вызов другим методом, просто перейдите на соответствующую вкладку.

Не обращайте внимания на плохой пример других. Зачем тратить столько времени и усилий, пытаясь воспроизвести чужую ошибку?

0 голосов
/ 17 февраля 2010

Я получил ответ от google group и последовал его предложению, все работает:

от Сукима: Я полагаю (хотя у меня нет никакой реальной идеи), что эти приложения, такие как скайп и Beejive, делают, когда представление A хочет представление C, оно сообщит вашему UITabBar о переходе на вкладку чатов, а затем вставит подробный вид C. потому что тогда пользователь увидит, что вид изменился благодаря тому, что панель вкладок изменила подсветку. от: я далее читаю поток stackoverflow. Теперь я понимаю, о чем вы спрашиваете.

0 голосов
/ 22 января 2010

Если вы действительно хотите это сделать, вы можете создать метод в B, который будет толкать C, затем нажать B из A (без анимации) и вызвать метод, который толкает C. Конечно, когда вы вставите C в B, A все равно под ним.

0 голосов
/ 22 января 2010

Вы всегда будете возвращаться к представлению, которое вызывало pushViewController

Не могли бы вы отправить A сообщение B, которое заставит B вызвать pushViewController?
Возможно, я вас не понимаюархитектура, но я верю, что это сработает.

...