说我有UITableViewController A和UITableViewController B. A和B都加载UIView C. 在C的后退按钮中,如何确保它始终返回到B,而不是从哪里来?
这是一个具体的例子: A = iphone skype中的联系人窗口。 B =聊天窗口,每行是与不同人的聊天记录 C =聊天窗口显示与同一个人的对话。
C可以从A或B加载,但我希望聊天窗口(C)上的后退按钮仅返回到聊天(B)窗口。
干杯。
答案 0 :(得分:2)
你会发现这很难实现,因为这是一个糟糕的UI设计,API不支持它。
您的用户可以使用后退按钮将其“返回”到上一个视图,就像他们使用的其他应用一样。转到任何其他视图会让他们更加困惑,因为它不是层次结构而是循环。用户有时会去B - > C - > B但其他时间,A - > C - > B - > C。 (他们如何回到A?)
而不是在C中的后退按钮,你应该在右侧有一个按钮,无论你如何到达C,它总是带你到B.同一个上下文中的相同按钮应该总是产生相同的结果。用户不必记住他们所处的隐形模式,以预测按钮将具有什么操作。
(这一切都在我的头顶,所以拿一粒盐。) 您将需要放弃使用导航控制器,而是自己管理视图。您需要通过在每个选项卡的视图属性中用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线程。我现在明白你的要求了。