在ViewControllers之间传递数据(再次)

时间:2012-09-04 19:54:43

标签: iphone objective-c ios xcode

我很抱歉,我知道之前已经问过这个问题了。但经过4个小时的搜索,我找不到一个很好的解释。

所以我想做的是:我有一个tableView,用户可以选择一些东西(使用AccessoryCheckmark)。触摸UINavigationBar中的“后退”按钮时(viewWillDisappear)我想将选定的行(我有一个名为“selectedRowArray”的数组,它正确地给我选择的值)发送回它之前的NavigationController。 我读到了关于AppDelegates,@ property,委托和(正确的“最糟糕”的方式)NSUserDefaults。

请有人告诉我,将tableView2 BACK中的数据传递给tableView1,哪种方式最好(最聪明)?

4 个答案:

答案 0 :(得分:1)

使前一个视图控制器成为选择视图控制器的委托。

从选择视图控制器调用上一个视图控制器上的委托方法,告诉它选择了什么。

基本上,他们的关键是使用委托。使得设置的委托成为选择控制器的弱属性(这意味着你的目标是iOS 5或更高版本,你应该这样做。)

协议是可选的。

答案 1 :(得分:0)

要将数据发送到视图控制器堆栈(导航堆栈)中的上一个视图,您可以使用以下代码段:

int previous = self.navigationController.viewControllers.count - 2;
UIViewController *controller = [self.navigationController.viewControllers objectAtIndex:previous];
controller.arrayProperty = @[];  //array element to pass into whatever specified property
[self.navigationController popViewControllerAnimated:YES];

当然一定要将UIViewController更改为以前的视图类名,并确保在之前的视图控制器头文件中创建属性,如下所示:

@property(strong)NSArray *arrayProperty;

答案 2 :(得分:0)

我有类似的情况而且我是ios dev的新手,所以我希望你能以我的回答为首。在我谈到一件简单的事情之前,我甚至不得不搜索几个小时。

我和@protocol和代表们度过了艰难的时光。

我找到了一个教程(我目前无法找到),它基本上是在nextViewController中定义一个属性并从prevViewController设置它的值

//nextViewController.h

@interface nextViewController
@property (nonatomic, strong) NSString *searchString;
@end

// prevController.h

import "NextViewController.h"
@property (weak, nonatomic) PrevViewController *prevViewController;

// prevController.m
-someMethodFromWhereYouWantToSetTheProperty {
   prevViewController.searchString = self.yourvalue;
}

编辑:

我已经指出我是ios dev的新手。所以,我不确定这是否是正确的方法,或者它是否有任何缺点。

答案 3 :(得分:-1)

Braydens的方式确实不错,但我更喜欢制作一个单身,它很好且易于处理。使单身人士存储您的属性。您还可以随时检查属性是否为零。