我提出了一个WKInterfaceController与一个模态从另一个接口控制器。
当您点击这个模态接口控制器的表中的一行时,我如何取消这个接口控制器并与呈现接口控制器进行通信?
这是我目前的故事板设置。
[Root] -> [Push 1] -> [Push 2] -> [Modal]发布于 2015-11-26 06:49:22
我想你对NSNotificationCenter是友好的。
首先,除了父控制器是根控制器之外,无法访问父接口控制器。
根控制器可以通过以下方式访问:
[WKExtension sharedExtension].rootInterfaceController基本上,不建议在接口控制器之间进行直接通信。使用NotificationCenter代替。所以在你的模态控制器中,做这样的事情:
-(void) didTapARowInTable
{
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@"UseDidTapARowFromModal"
object:self
userInfo:@{/* data that will be needed
to present new modal here */}];
// close current modal.
[self dismissController];
}第二,WKInterfaceController中的任何UI代码在它不是活动的时候都不能工作。所有的WKInterfaceObject都是与真正的远程UI相连接的查询对象(您知道故事板文件位于分隔的包中)。当未显示远程UI时,它的接口控制器将被停用,并且不能再将UI修改查询发送到实际的UI对象。它只能在未激活时修改自己的状态。
因此,父控制器在被激活之前不应该访问任何UI API (例如显示一个新的模式或更改WKInterface对象)。因此,在您的父控制器中,可以这样做:
-(void)didReceiveTapRowNotification:(NSNotification*) note
{
// just remember task to perform, don't use any UI code here.
_taskInfo = note.userInfo;
}
-(void)willActivate
{
[super willActivate];
// check scheduled task and do it if exists.
if(_taskInfo){
[self presentControllerWithName:@"modal-name"
context:_taskInfo];
_taskInfo = nil;
}
}https://stackoverflow.com/questions/33862111
复制相似问题