gpt4 book ai didi

ios - 按下导航后退按钮时将值返回到呈现 View Controller

转载 作者:行者123 更新时间:2023-11-28 20:04:34 25 4
gpt4 key购买 nike

我无法将所有这些拼凑在一起。我有一个打开另一个的 View Controller (将它推到导航堆栈)。在呈现的 View Controller 上,用户在 TextView 中输入一个值。当用户在导航中按下后退按钮时,我希望能够将他们在 TextView 中输入的值传回呈现 Controller 。

我一直在寻找一种通过后退按钮使用 unwind segue 的方法,但没有找到任何东西。当我(以编程方式)创建我的后退按钮时,我使用 initWithTitle:style:target:action 但我不确定如何在实现 action 方法时我将能够访问在呈现的 Controller 中设置的值。可能必须使用委托(delegate)来链接两者,但不确定此场景的确切集成点。

我觉得我离这里很近,一点帮助就能让我到达那里。谢谢!

最佳答案

用于此交互的两个最常见的模型是 subview Controller 具有委托(delegate)或完成 block 。两者都将在 prepareForSegue 方法中设置。我个人的偏好是完成 block 方法,因为它包含代码,但是 ymmv。

还有多种模型可用于检测您的 subview Controller 何时被关闭并且您需要调用委托(delegate)和/或完成:

  1. 使用自定义后退按钮。不喜欢这个,因为创建一个真正看起来和行为都像 Apple 原版的后退按钮可能是个问题,尤其是在支持 iOS 6 和 iOS 7 的情况下。

  2. Hook viewDidDisappear 并查看您是否仍在导航 Controller 的 viewControllers 数组中。这更好,因为后退按钮可以正常工作,但仍然感觉有点矫揉造作。

  3. 使用 UINavigationBarDelegate 方法 navigationBar:shouldPopItem: 这很有吸引力,尤其是当您需要进行其他验证时,例如检查已保存/未保存的值。要实现这一点,您必须继承 UINavigationController 并将该方法转发给您的 subview Controller 。

编辑:选项 2 的详细信息:

-(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
if(![self.navigationController.viewControllers containsObject:self])
{
// We're not still in the navigation stack so we must've been
// popped. If we were pushed, viewDidDisappear would be called
// but viewControllers containsObject:self would be true
}
}

编辑:澄清选项 3:在您的导航 Controller 子类中

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
UIViewController* top = self.topViewController;
if([top respondsToSelector:@selector(navigationBar:shouldPopItem:)])
return [(id)top navigationBar:navigationBar shouldPopItem:item];
return [super navigationBar:navigationBar shouldPopItem:item];
}

然后您可以在需要该功能的类中实现navigationBar:shouldPopItem:

关于ios - 按下导航后退按钮时将值返回到呈现 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22512828/

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