当前位置:  开发笔记 > 编程语言 > 正文

parentViewController始终是导航控制器吗?

如何解决《parentViewController始终是导航控制器吗?》经验,为你挑选了1个好方法。

一个星期前我对此感到有些不安,现在我的腰带上有一点点可可体验,我觉得我对可能发生的事情有所了解.

我正在创建一个由UINavigationController驱动的应用程序.在AppDelegate中,我使用"第1页"作为根视图控制器创建此类的实例.

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

现在我在这里遇到问题.从"第1页"开始,我想使用在界面上滑动的模态视图控制器,然后在用户进行编辑后消失.我在Page1ViewController中使用这样的代码来做到这一点:

[self presentModalViewController:myModalViewController animated:YES];

当模态视图控制器消失时,我希望"页面1"上的值根据用户在模态视图控制器中输入的内容进行更改.所以,我写了一些像这样的代码,它存在于模态视图控制器中:

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

第1页的更新没有发生,我花了很长时间才意识到"doSomethingPleaseWithSomeData"消息没有发送到Page1ViewController,而是发送到导航控制器.

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



1> Alex..:

我建议使用委托模式来解决您的问题.创建一个属性

@property (nonatomic, assign) id  delegate;

和相应的协议

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

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

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

现在,将委托设置为应该管理整个事物的视图控制器,并在视图控制器完成时通知它.请注意,您需要视图控制器来关闭模态视图控制器.但是,从逻辑上讲,这是有道理的,因为它是首先呈现模态视图控制器的对象.

这就是Apple在例如UIImagePickerController和UIPersonPickerController中解决这个问题的方法.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有