假设我有 UITableViewController A 和 UITableViewController B。A 和 B 都加载 UIView C。在 C 中的后退按钮上,我如何确保它总是回到 B,而不是它来自哪里?
这是一个具体的例子:A=iphone skype 中的联系人窗口。B=聊天窗口,每一行都是与不同人的聊天记录 C = 聊天窗口显示与同一个人的对话。
C 可以从 A 或 B 加载,但我希望聊天窗口 ( C ) 上的后退按钮仅返回到聊天 (B) 窗口。
干杯。
假设我有 UITableViewController A 和 UITableViewController B。A 和 B 都加载 UIView C。在 C 中的后退按钮上,我如何确保它总是回到 B,而不是它来自哪里?
这是一个具体的例子:A=iphone skype 中的联系人窗口。B=聊天窗口,每一行都是与不同人的聊天记录 C = 聊天窗口显示与同一个人的对话。
C 可以从 A 或 B 加载,但我希望聊天窗口 ( C ) 上的后退按钮仅返回到聊天 (B) 窗口。
干杯。
你会发现这很难实现,主要是因为这是一个糟糕的 UI 设计并且 API 不支持它。
您的用户会期望一个后退按钮将他们“返回”到上一个视图,就像他们使用的所有其他应用程序一样。转到任何其他视图会使他们更加困惑,因为它不是层次结构而是循环。用户有时会选择 B-->C-->B,但有时会选择 A-->C-->B-->C。(他们如何回到A?)
而不是 C 中的后退按钮,您应该在右侧有一个按钮,无论您如何到达 C,该按钮始终将您带到 B。相同上下文中的相同按钮应该始终产生相同的结果。用户不必记住他们处于什么不可见模式来预测按钮将执行什么操作。
(这完全不在我的脑海中,所以请持保留态度。)您将需要放弃使用导航控制器,而是自己管理视图。您需要通过选项卡栏交换视图,方法是在每个选项卡的视图属性中用 C 视图替换 A 和 B 视图。
我认为您必须从不可见的主视图开始,然后将标签栏添加到该视图中。在主视图控制器中,为每个视图创建属性/出口。在每个视图中,都有一个链接到主视图控制器的属性/出口。然后在 A 和 B 中使用 C 视图调用方法的“后退按钮”(我强烈建议您将其标记为“聊天”),然后在主视图控制器中调用一个方法,该方法 (1) 从选项卡 A 或删除 C 视图选项卡 B (2) 将选项卡切换到 B 选项卡,然后 (3) 将视图 B 加载到选项卡 B。
我无法强调我认为这种设计有多笨拙。其他应用程序是否使用它并不重要。根据我的经验,大公司更容易犯界面错误,因为他们的营销部门希望 UI 看起来独一无二。
相比之下,看看手机应用程序如何处理相同的情况。无论您使用哪个选项卡拨打电话、收藏夹、联系人、键盘等,通话结束后您仍会返回该选项卡的视图。如果您想使用其他方法拨打电话,只需点击相应的选项卡即可。
忽略别人的坏榜样。为什么要花这么多时间和精力试图重现别人的错误?
我从谷歌小组得到了答案,并按照他的建议,它有效:
来自 Sukima:我相信(虽然我不知道)这些应用程序(如 Skype 和 Beejive)正在做的是当视图 A 想要视图 C 时,它会向您的 UITabBar 发送消息以移动到聊天选项卡,然后推送详细视图 C。实际上更好,因为这样用户将通过标签栏更改突出显示的事实看到视图已更改。来自:我进一步阅读了stackoverflow线程。我现在明白你的要求了。
如果你真的想这样做,你可以在 B 中创建一个推送 C 的方法,然后从 A 推送 B(没有动画)并调用推送 C 的方法。当然,当你将 C 弹出到 B 时,A 仍然在它下面。
你总是会回到调用的视图pushViewController
您可以让 A 向 B 发送一条导致 B 呼叫的消息pushViewController
吗?
我可能不了解您的架构,但我相信这会奏效。