作为 willActivate 的一部分更新界面时的奇怪行为
Odd behavior when updating interface as part of willActivate
我有一个 WKInterfaceController
subclass,它显示 6 行 WKInterfaceTable
。这个class也是初始界面控制器。当通过 handleActionWithIdentifier:forLocalNotification
收到通知操作时,我会模态地呈现第二个界面控制器。用户不对模态呈现的界面控制器执行任何操作,但加载它会修改初始界面中行控制器使用的 6 个对象之一的状态。当模态控制器被关闭时,我的意图是在 table 中反映更新后的状态。
我检索更新的对象没有问题,因为它们的管理由另一个 class 处理,我可以简单地查询更新的数据。由于初始界面控制器已经执行awakeWithContext:
,我只能依靠willActivate
来更新界面。这似乎符合 Apple 的指导方针,因为我没有将界面作为该方法的一部分进行初始化,而只是对其进行了更新。
TL;DR;
当我通过行控制器更新行时,只有更新的值才能正确显示在单元格上。其他单元格使用故事板上设计时分配给我的单元格中标签的默认值。
例如
- 第 1 行:计数 - 3 最佳 - 3
- 第 2 行:计数 - 42 最佳 - 99
- 第 3 行:计数 - 42 最佳 - 99
非常奇怪的是,这只发生在对 willActivate
的后续调用中。在 willActivate
中首次打开手表应用程序并更新界面时,它的行为符合预期。当由于模态关闭而被激活时,这种行为会逐渐加剧。
感谢任何想法。
我能想到两个可能的问题。
首先,WatchKit 界面控制器的行为就好像它们是页面集中的快照一样。在它们显示一次后,这些值在停用后不会更新,直到它们完全显示在屏幕上并且您的 willActivate
方法被调用。当界面不可见时,切换图像与切换 table 行标签相同。必须在 willActivate
内完成,否则它似乎会被丢弃。
我看到的另一个与此相关的问题是当您 setNumberOfRows
时,您需要更新所有行中的值。否则,您最终会得到您设置的自定义行值,以及故事板中所有其他行的默认值。如果您只是更新 willActivate 中特定行的值而不是在 Table 上调用 setNumberOfRows
,那么我会说您应该向 Apple 的 Bug Reporting System 提交错误。
我有一个 WKInterfaceController
subclass,它显示 6 行 WKInterfaceTable
。这个class也是初始界面控制器。当通过 handleActionWithIdentifier:forLocalNotification
收到通知操作时,我会模态地呈现第二个界面控制器。用户不对模态呈现的界面控制器执行任何操作,但加载它会修改初始界面中行控制器使用的 6 个对象之一的状态。当模态控制器被关闭时,我的意图是在 table 中反映更新后的状态。
我检索更新的对象没有问题,因为它们的管理由另一个 class 处理,我可以简单地查询更新的数据。由于初始界面控制器已经执行awakeWithContext:
,我只能依靠willActivate
来更新界面。这似乎符合 Apple 的指导方针,因为我没有将界面作为该方法的一部分进行初始化,而只是对其进行了更新。
TL;DR;
当我通过行控制器更新行时,只有更新的值才能正确显示在单元格上。其他单元格使用故事板上设计时分配给我的单元格中标签的默认值。
例如
- 第 1 行:计数 - 3 最佳 - 3
- 第 2 行:计数 - 42 最佳 - 99
- 第 3 行:计数 - 42 最佳 - 99
非常奇怪的是,这只发生在对 willActivate
的后续调用中。在 willActivate
中首次打开手表应用程序并更新界面时,它的行为符合预期。当由于模态关闭而被激活时,这种行为会逐渐加剧。
感谢任何想法。
我能想到两个可能的问题。
首先,WatchKit 界面控制器的行为就好像它们是页面集中的快照一样。在它们显示一次后,这些值在停用后不会更新,直到它们完全显示在屏幕上并且您的 willActivate
方法被调用。当界面不可见时,切换图像与切换 table 行标签相同。必须在 willActivate
内完成,否则它似乎会被丢弃。
我看到的另一个与此相关的问题是当您 setNumberOfRows
时,您需要更新所有行中的值。否则,您最终会得到您设置的自定义行值,以及故事板中所有其他行的默认值。如果您只是更新 willActivate 中特定行的值而不是在 Table 上调用 setNumberOfRows
,那么我会说您应该向 Apple 的 Bug Reporting System 提交错误。