后退按钮返回到它来自的不同的UITableViewController

时间:2010-01-21 22:17:20

标签: iphone instant-messaging

说我有UITableViewController A和UITableViewController B. A和B都加载UIView C. 在C的后退按钮中,如何确保它始终返回到B,而不是从哪里来?

这是一个具体的例子: A = iphone skype中的联系人窗口。 B =聊天窗口,每行是与不同人的聊天记录 C =聊天窗口显示与同一个人的对话。

C可以从A或B加载,但我希望聊天窗口(C)上的后退按钮仅返回到聊天(B)窗口。

干杯。

4 个答案:

答案 0 :(得分:2)

你会发现这很难实现,因为这是一个糟糕的UI设计,API不支持它。

您的用户可以使用后退按钮将其“返回”到上一个视图,就像他们使用的其他应用一样。转到任何其他视图会让他们更加困惑,因为它不是层次结构而是循环。用户有时会去B - > C - > B但其他时间,A - > C - > B - > C。 (他们如何回到A?)

而不是在C中的后退按钮,你应该在右侧有一个按钮,无论你如何到达C,它总是带你到B.同一个上下文中的相同按钮应该总是产生相同的结果。用户不必记住他们所处的隐形模式,以预测按钮将具有什么操作。


Edit01 :(对以下评论的回应)

(这一切都在我的头顶,所以拿一粒盐。) 您将需要放弃使用导航控制器,而是自己管理视图。您需要通过在每个选项卡的视图属性中用C视图替换A和B视图来通过标签栏交换视图。

我认为您必须从不可见的主视图开始,然后将tabbar添加到该视图中。在主视图控制器中,为每个视图创建属性/出口。在每个视图中,都有一个链接到主视图控制器的属性/出口。然后在A和B中使用C视图调用方法的“后退按钮”(我强烈建议您标记“聊天”),然后调用主视图控制器中的方法(1)从任一选项卡A中删除C视图或选项卡B(2)将选项卡切换到B选项卡,然后(3)将视图B加载到选项卡B.

我无法强调我认为这种设计是多么笨拙。其他应用程序使用它并不重要。根据我的经验,大型公司更容易出现界面错误,因为他们的营销部门希望用户界面看起来很独特。

相比之下,看看手机应用程序如何处理相同的情况。无论您使用哪个选项卡拨打电话,收藏夹,联系人,键盘等,您都可以在通话结束时返回该选项卡的视图。如果您想使用其他方法拨打电话,只需点击相应的标签即可。

忽略别人的坏榜样。为什么花这么多时间和精力试图重现别人的错误?

答案 1 :(得分:0)

您最终会回到调用pushViewController

的视图

您是否可以向A发送一条消息,导致B呼叫pushViewController? 我可能不了解你的架构,但我相信这样可行。

答案 2 :(得分:0)

如果你真的想这样做,你可以在B中创建一个方法,推动C然后从A推动B(没有动画)并调用推动C的方法。当然,当你将C弹出到B时,A仍将是在它之下。

答案 3 :(得分:0)

我从google group得到答案,并按照他的建议,它有效:

来自Sukima: 我相信(虽然我没有真正的想法),像skype和Beejive这样的应用程序正在做的是当视图A想要视图C时它将通知你的UITabBar移动到聊天标签然后推入详细视图C.这实际上更好因为然后用户将通过tabbar已更改突出显示的事实看到视图已更改。来自:我进一步阅读了stackoverflow线程。我现在明白你的要求了。