在竞争的模态视图控制器之间切换

时间:2012-01-24 22:41:57

标签: iphone ios modalviewcontroller

我的应用有三种状态:

  • A)连接到服务器
  • B)连接到wifi,但没有互联网
  • C)没有连接

第一个状态是应用程序的默认操作模式,另外两个(B& C)表示为模态视图控制器。在各种可达性变化时,应出现正确的模态视图。

不幸的是,在某些情况下B& C都试图同时出现,或者B目前已经呈现,距离结束可能还有一毫秒,但C已经在尝试展示自己。

我的解决方案是基本上创建一个信号量,每个模态视图都有一些代理 - 当模态视图打开时,它会通过委托发送一条消息,转到主视图打开一个标志。然后,当第二个模态视图尝试打开时,它会看到第一个模态视图打开并等待它关闭。对于我试图制作一个非常基本的状态机来说,这似乎是一个荒谬的黑客。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您没有具体说明B& C可以同时呈现两者,所以首先想到的是你可以寻找一种不同的方法来检查你是否遇到B或C,这样你就可以更好地消除歧义。

谈到你正在使用的旗帜,我想丑陋的部分与你提到的等待有关。这对我来说似乎有些过分。一种替代方法是,不要让第二个模态视图等待标志重置,而是让第一个模态视图发送第二个视图正在观察的通知。实现这一点非常简单,您可以在S.O.中找到许多示例。 (例如,this one)。

答案 1 :(得分:1)

我将这个单独的B&将C情况转换为单个视图控制器,根据B或C是否在任何给定时刻发生更改其视图。这样你就没有竞争对手,因为只有一个视图控制器。