gpt4 book ai didi

iphone - ParentViewController 始终是导航 Controller 吗?

转载 作者:行者123 更新时间:2023-12-03 18:37:38 25 4
gpt4 key购买 nike

一周前我对此有点摸不着头脑,现在有了更多的 Cocoa 经验,我觉得我对可能发生的事情有所了解。

我正在制作一个由 UINavigationController 驱动的应用程序。在 AppDelegate 中,我使用“page 1”作为 Root View Controller 创建此类的实例。

UINavigationController *aNavigationController = [[UINavigationController alloc] 
initWithRootViewController:page1ViewController];

现在这就是我遇到问题的地方。从“第 1 页”开始,我想使用一个模态视图 Controller ,它在界面上滑动,然后在用户进行编辑后消失。我在 Page1ViewController 内部使用这样的代码来做到这一点:

[self presentModalViewController:myModalViewController animated:YES];

当模态视图 Controller 消失时,我希望“第 1 页”上的值根据用户在模态视图 Controller 中输入的内容进行更改。因此,我编写了一些类似这样的代码,该代码驻留在模态视图 Controller 中:

[self.parentViewController dismissModalViewControllerAnimated:YES];
[self.parentViewController doSomethingPleaseWithSomeData:someData];

页面 1 的更新没有发生,我花了很长时间才意识到“doSomethingPleaseWithSomeData”消息没有发送到 Page1ViewController,而是发送到导航 Controller 。

使用导航 Controller 时是否总是会出现这种情况?我可能配置不正确吗?有没有一种简单的方法可以获取我想要的 View Controller (在本例中为 Page1ViewController)。

最佳答案

我建议使用委托(delegate)模式来解决您的问题。创建属性

@property (nonatomic, assign) id <MyModalViewDelegate> delegate;

以及相应的协议(protocol)

@protocol MyModalViewDelegate
@optional
- (void)myModalViewControllerDidFinish:(MyModalViewController *)aModalViewController;
@end

当用户完成您的 View (例如点击保存按钮)时,发送此消息:

if ([self.delegate respondsToSelector:@selector(myModalViewControllerDidFinish:)])
[self.delegate myModalViewControllerDidFinish:self];

现在,将委托(delegate)设置为应该管理整个事情的 View Controller ,当 View Controller 完成时它将收到通知。请注意,您需要 View Controller 来关闭模态视图 Controller 。但是,从逻辑上讲,这是有道理的,因为它是首先呈现模态视图 Controller 的对象。

这就是 Apple 在 UIImagePickerController 和 UIPersonPickerController 等中解决此问题的方法。

关于iphone - ParentViewController 始终是导航 Controller 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/244588/

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