我在通知回来后试图更改按钮的标题,但它根本没有响应.我检查了它不是零并检查了我分配的文本,一切都很好.我使房产类型强大而不是弱,但没有成功.
- (void) setButtonTitleFromSelectedSearchResult:(NSNotification *)notif { [self popController]; self.sourceMapItem = [[notif userInfo] valueForKey:@"SelectedResult"]; NSLog(@"The Selected Result is: %@",self.sourceMapItem.name); //Testing NSLog(@"%@",self.fromButton); // check it's not nil [self.fromButton setTitle:self.sourceMapItem.name]; }
解决方法
使用WatchKit,如果用户界面元素当前不可见,则无法更新.因此,如果您在“顶部”提供了另一个接口控制器,则在您解除所提供的控制器之前,您无法更新任何呈现控制器的界面元素.此时,您可以使用willActivate方法安全地更新呈现控制器.
SushiGrass传递积木的方法当然是一种有效的方法.然而,在我的测试中,我最终必须管理多个块,并且许多后续块反转了先前排队块已完成的内容(例如,首先将标签的文本更改为“foo”,然后“bar”,然后“foo” “再次.虽然这可行,但它不是最佳的.
我建议任何正在使用WatchKit应用程序的人花点时间考虑他们想要如何考虑屏幕外(即当前不可见)的界面元素. willActivate是你的朋友,如果你从控制器转移到控制器,那么想出一种管理该方法更新的方法是值得的.
为了它的价值,我在JBInterfaceController子类中封装了很多这样的逻辑,它为你处理了很多这样的事情.通过将其用作您自己的接口控制器的基类,您可以在添加的didUpdateInterface方法中更新元素.不幸的是,我还没有时间编写适当的文档,但是头文件和示例项目应该让你:https://github.com/mikeswanson/JBInterfaceController