gpt4 book ai didi

objective-c - 带有模态转场的 WKInterfaceController

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:40 26 4
gpt4 key购买 nike

我正在展示一个 WKInterfaceController,它带有来自另一个界面 Controller 的模态转场。

当您点击此模态界面 Controller 表格中的一行时,我如何关闭此界面 Controller 并与呈现界面 Controller 通信?

这是我当前的 Storyboard设置。

[Root] -> [Push 1] -> [Push 2] -> [Modal]

最佳答案

我假设您对 NSNotificationCenter 很友好。

起初,除了父 Controller 是根 Controller 之外,没有办法访问父接口(interface) Controller 。

可以通过以下方式访问根 Controller :

[WKExtension sharedExtension].rootInterfaceController

基本上,不推荐接口(interface) Controller 之间的直接通信。请改用 NotificationCenter。所以在你的模态 Controller 中,做这样的事情:

-(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 连接的查询对象(你知道 Storyboard文件位于单独的包中)。当远程 UI 不显示时,它的界面 Controller 被停用,它不能再向真实的 UI 对象发送 UI 修改查询。它只能在未激活时修改自己的状态。

因此父 Controller 在激活之前不应访问任何 UI API(例如显示新模式或更改 WKInterface 对象)。所以,在你的父 Controller 中做这样的事情:

-(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;
}
}

关于objective-c - 带有模态转场的 WKInterfaceController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com