首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带模态分格的WKInterfaceController

带模态分格的WKInterfaceController
EN

Stack Overflow用户
提问于 2015-11-23 00:41:23
回答 1查看 231关注 0票数 3

我提出了一个WKInterfaceController与一个模态从另一个接口控制器。

当您点击这个模态接口控制器的表中的一行时,我如何取消这个接口控制器并与呈现接口控制器进行通信?

这是我目前的故事板设置。

代码语言:javascript
复制
[Root] -> [Push 1] -> [Push 2] -> [Modal]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-26 06:49:22

我想你对NSNotificationCenter是友好的。

首先,除了父控制器是根控制器之外,无法访问父接口控制器。

根控制器可以通过以下方式访问:

代码语言:javascript
复制
[WKExtension sharedExtension].rootInterfaceController

基本上,不建议在接口控制器之间进行直接通信。使用NotificationCenter代替。所以在你的模态控制器中,做这样的事情:

代码语言:javascript
复制
-(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对象)。因此,在您的父控制器中,可以这样做:

代码语言:javascript
复制
-(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;
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33862111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档