模态 ViewController 委托回调 - 如何?

Posted

技术标签:

【中文标题】模态 ViewController 委托回调 - 如何?【英文标题】:modalViewController delegate callbacks - HowTo? 【发布时间】:2011-07-17 21:04:24 【问题描述】:

我有一些视图控制器,当我单击某个按钮时,我会创建 modalView(用 UINavigationController 包装)并呈现它。

DscViewController *enterDescription = [[[DscViewController alloc] init] autorelease];


    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:enterDescription];
    [self presentModalViewController:navController animated:YES];
    [navController release];

问题是,如何使我的(父)视图控制器成为委托,以及当我单击 modalViewController 上的某个按钮(例如完成)以调用我的父视图控制器中的某个方法来关闭模式并从模态输入?

【问题讨论】:

【参考方案1】:

我认为让一个控制器责备它的父控制器来完成它应该处理的工作并不是一个好习惯。您可以随时使用self.parentViewController 来关闭您当前所在的模式。

如果由于某种原因您只处理 parentViewController 中的存储,那么您可以将 done 按钮操作指向当前 viewController 中的方法,然后使用 self.parentViewController 触发父方法进行存储。

或者直接将你的按钮代理设置为self.parentViewController

[button addTarget:self.parentViewController action:@selector(someMethodInParentViewController) forControlEvents:UIControlEventTouchUpInside];

【讨论】:

我得到了“无法识别的选择器发送到实例...”这个显示示例的错误。当然,在我的父视图控制器中,我有方法 -(void)someMethodInPrentView 这是因为,我的 modalViewController 被 NavigationController 包裹了 您始终可以通过引用 UINavigationViewController 中包含的模态视图控制器来传递根视图控制器。你也可以使用 NSNotifications,而不使用委托。 你能给我一些简单的例子吗? 看我的回答 here 使用 NSNotifications

以上是关于模态 ViewController 委托回调 - 如何?的主要内容,如果未能解决你的问题,请参考以下文章

NSObject 模态视图和委托

如何在 ViewController 之间传递委托

从 SubView 呈现模态 ViewController

1 个 ViewController 和 2 个 modalViews 委托

IOS 7:添加具有透明度的模态 ViewController:自定义大小

从 UIWebView 委托呈现 ViewController