【问题标题】:Call delegate when user tap "Back" button当用户点击“返回”按钮时调用代理
【发布时间】:2015-11-19 00:00:39
【问题描述】:

当用户点击返回按钮时,我需要一种根据用户输入更改文本的方法。我遵循了那个解决方案:Find out if user pressed the back button in uinavigationcontroller?

并在viewDidLoad 中添加了以下代码:

if ([self isMovingFromParentViewController]) {
    NSLog(@"isMoved");
    [self.delegate stringChangedTo:self.myTextField.text atIndex:self.indexToPass];
}

然而,一切都没有改变。多说一句,方法没有被调用(NSLog不输出字符串)。

当用户点击返回按钮时,我如何找到一种调用委托的方法?

【问题讨论】:

  • 将块变量添加到视图控制器以进行回调,当从自定义后退处理程序按下后退时,在该方法中,从前一个视图控制器中捕获回调变量并将其存储在实例变量中。回调完成值可以在按下返回按钮的viewcontorller的viewdiddisappear或viewwilldisappear中设置。

标签: ios objective-c


【解决方案1】:

该代码需要在viewWillDisappear:viewDidDisappear: 中。不是viewDidLoad

viewDidLoad 在加载视图控制器的视图时调用。您想在视图控制器被解除时调用委托。

【讨论】:

  • 好的,它工作。你能解释一下吗?为什么?
  • 顺便说一句,看起来委托调用出现在我的视图(按下回时得到)加载之后。因此,委托人假设更改单元格上的文本,它确实如此,但经过短暂的延迟后,看起来不是很好。
  • 使用viewWillDisappear:,而不是viewDidDisappear:
【解决方案2】:

还有一个UINavigationControllerDelegate 协议。通过实现以下任一方式,您可以在显示给定视图控制器时收到通知:

-navigationController:willShowViewController:animated:

-navigationController:didShowViewController:animated:

附录: 在我看来,使用委托是一种更简洁的设计,因为您会在导航事件发生时准确地得到通知。视图控制器生命周期方法(例如 -viewDidDisappear: 等)可以在您呈现/关闭模态视图控制器时被调用,并要求您添加逻辑来识别它们。

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多