如果在最后一页调用了becomeCurrentPage,则不绘制接口

时间:2016-01-21 06:21:00

标签: ios watchkit wkinterfacecontroller

就像莎拉在这个链接中说的那样: https://forums.developer.apple.com/thread/26922 当我调用“presentControllerWithNames()”并且页面大于5时,我使用方法“becomeCurrentPage”也有同样的问题。 我有一个WatchKit应用程序,其中初始控制器创建一个使用presentControllerWithNames()调用的15页面接口。 所有这些都是相同的子类WKInterfaceController。 根据传递的上下文数据,前15个页面中的一个将在awakeWithContext()期间调用becomeCurrentPage()以使其成为活动页面。 只要它是早期页面之一,这样就可以正常工作,但对于以后的页面,显示屏显示为空白。 如果我向后滑过页面,在我到达第4页之后不会显示任何内容。之后向前或向后滑动显示预期的显示。 使用调试器,我可以看到界面元素都已初始化,可以通过编程方式访问。它们没有设置为隐藏,但它们不会出现。

编写一个非常简单的测试应用程序,我发现问题不是总页数,而是调用了becomeCurrentPage()的页面索引。 这在模拟器和手表之间或从测试到测试之间并不一致。

在我的测试应用程序中,在模拟器上运行,如果任何包含18页的页面都处于活动状态,那么具有30页的应用程序将始终有效。 激活第19页有时会起作用。 激活第20页永远不会有效。

凭借我的实际手表,数字更低且更易变: 激活第5页将始终有效。 激活第6-10页有时会起作用。 激活第16页或更多内容将永远不会有效。

我试图稍后在方法中设置页面:“didAppear”如果我想要10或20页,它就没有用。

我发现唯一的解决方法是通过延迟分隔的页面进行一系列的跳转。 我发现前进了3页,延迟时间为0.3秒,但是它使得界面看起来很糟糕,因为到达目标页面需要一秒多的时间,屏幕会闪烁干扰页面。 / p>

这是ranCurrentPage()的已知错误吗? 有谁知道如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

从主线程中调用becomeCurrentPage()为我工作。

Apple Documentation提到始终从主线程调用becomeCurrentPage(。

dispatch_async(dispatch_get_main_queue(),{  
     controller.becomeCurrentPage()  
})