UI不会在segue上更改为新视图控制器

时间:2015-06-24 23:08:05

标签: ios swift segue viewcontroller

在我的应用程序中,我正在从一个视图控制器(OptionsViewController,此处为 OVC )移动到另一个(MainViewController,或 MVC )。在OVC中,我只有一些滑块和开关,允许用来设置与MVC相关的各种选项。当加载MVC时,它会实例化一个自定义标签ScrollingLabel,它实际上只是UILcroll中的UILabel,由设备内的加速度计控制。

要在OVC和MVC之间移动,我只需要一个带有segue的按钮连接两个将设置传递到MVC的按钮。然后MVC使用给定的设置创建新的ScrollingLabel,并开始滚动,以便用户可以使用加速度计控制整个界面。在MVC上,我有一个重置按钮,它会回到OVC并从superview中删除ScrollingLabel(通过从superview中删除它的组成UIScrollView)。通过这种方式,您可以在两个控制器之间来回切换。

除了罕见但可重复的实例外,所有这些都能很好地完成。当我将ScrollingLabel文本的fontSize设置为较大的值(例如200,在横向模式下,在任何给定时间转换为屏幕上可见的约10个字符),然后在两者之间来回切换OVC和MVC通过各自的segue按钮发生异常。在字体大小为200时,我第四次尝试从OVC移动到MVC(意味着我已经成功从OVC切换到MVC并返回3次),屏幕冻结。

屏幕将卡在OVC的视野上,有趣地随机地,没有用户输入,在屏幕上产生大的黑色矩形,随机地再次闪烁,大约频率为10 +秒。一些更多的异常。我在MVC viewDidLoad()中添加了一些打印语句,是的,即使是第4次MVC 正在加载,但是视图仍然在OVC上,现在是不可交互的,并开发了上述黑色矩形定期。

我对此感到困惑,因此进一步测试了。在第四次之后,我倾斜了iPad,所以如果MVC实际上已经以某种方式加载到OVC后面,ScrollingLabel中的文本将会滚动,我可以检查其内容偏移是否已经改变。我决定使用主页按钮退出应用程序,然后单击应用程序图标重新进入。令我惊讶的是,现在这对MVC开放了,我使用加速度计正确地移动了文本。这意味着确实MVC正在加载到OVC后面,并从加速度计中获取数据,但出于某种原因,OVC仍然在屏幕上。

更令人困惑的是,在完成“使用主页按钮退出后,通过应用程序图标重新进入”技巧后,问题再次没有发生,直到我从XCode重建,此时整个过程重置,第4个OVC - > MVC过渡冻结。

所以现在我很困惑,真的不知道为什么会发生这样的发展。我想也许我没有正确地取消分配MVC中的ScrollingLabel当我重置回OVC时,对于足够大的fontSize来说,这可能非常昂贵,但是当我每次重新进入MVC时重新创建标签我就是不确定。任何帮助都会非常感激,我很乐意根据需要提供代码或更多信息。

tl; dr - 从一个视图控制器到另一个视图控制器的segue将原始视图控制器图像留在屏幕上,但仍允许控制正确的视图控制器元素,而不会发生任何可视指示。

1 个答案:

答案 0 :(得分:0)

你是如何从OVC转回到MVC的?

如果你没有使用unwind segue,那么每次你回来时,你都会在之前的OVC / MVC对上堆叠一个新的OVC实例。

在其viewWillAppear中记录OVC的地址。我打赌你发现你每次都会得到一个新的。

如果您执行导航控制器推送,请使用带有popViewController调用的IBAction。

如果您正在进行模态presentViewController:animated:completion:,请在OVC的后退按钮上使用IBAction调用dismissViewController:animated:Completion:

另外实现展开segue。