按下返回按钮时传递数据

Posted

技术标签:

【中文标题】按下返回按钮时传递数据【英文标题】:passing data when pressing back button 【发布时间】:2014-08-10 10:54:58 【问题描述】:

我正在尝试在按下后退按钮时将数据传递给视图控制器,因为我正在使用 viewDidDisappear 方法,该方法工作正常。问题是,即使我在目标 viewController 中创建了对象,它也找不到它?

在 ViewControllerA 类型的对象上找不到属性“rentTimeArray”

我正在尝试将 nsarray 从 viewcontrollerB 发送到 viewcontrollerA

viewcontrollerB.m

首先我导入目标头文件

导入“ViewControllerA.h”

viewDidDissapear 方法:

- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];

    if (self.isMovingFromParentViewController) 

        NSArray * values = [pickedArray allValues];

        ViewControllerA *newHome = [[ViewControllerA alloc] init];


        newHome.rentTimeArray = newHome;

ViewControllerA.m

@property (nonatomic, weak) NSArray *rentTimeArray;

ViewControllerA.h

@Synthenize rentTimeArray,

【问题讨论】:

【参考方案1】:

如果我很好理解你的问题,当用户在ViewControllerB 中点击返回按钮时,你想在ViewControllerA 中设置rentTimeArray 的值,对吗?如果是,那么您的代码有几个问题。首先:

你的rentTimeArray 应该在ViewControllerA.h 中声明,因为它应该对像你的viewcontrollerB 类这样的其他实例可见。

第二个问题:

您不能在viewWillDisappear:animated 方法中初始化其他ViewControllerA,因为它将在导航堆栈中创建除当前现有ViewControllerA 之外的其他实例。如果你想以这种方式实现这一点,你应该做这样的事情:

- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];

    if (self.isMovingToParentViewController) 

        for (UIViewController *controller in self.navigationController.viewControllers) 
            if ([controller isKindOfClass:[ViewControllerA class]]) 
                ViewControllerA *viewControllerA = (ViewControllerA *)controller;
                controller.rentTimeArray = [pickedArray allValues];
                break;
            
        
    

不过,您应该了解委托或块模式以在 2 个视图控制器之间传递值。

【讨论】:

使用委托或块模式会更有效吗? 高效、更快、更易读,而且还具有“良好的编程风格”。如果你学习过一次委托和/或块模式,你就会爱上使用它们! 好的,我现在正在做委托模式,我会接受这个答案,因为它有效。提前谢谢你 在这种情况下使用协议!

以上是关于按下返回按钮时传递数据的主要内容,如果未能解决你的问题,请参考以下文章

按下返回按钮时关闭 DatePickerDialog

Phaser 3 切换场景重叠文本

按下返回按钮时在 UITextField 之间切换

按钮 按下返回到其他活动

避免按下返回按钮时图像闪烁

在颤振中,按下后退按钮时如何返回上一个 URL?