我很抱歉,我知道之前已经问过这个问题了。但经过4个小时的搜索,我找不到一个很好的解释。
所以我想做的是:我有一个tableView,用户可以选择一些东西(使用AccessoryCheckmark)。触摸UINavigationBar中的“后退”按钮时(viewWillDisappear)我想将选定的行(我有一个名为“selectedRowArray”的数组,它正确地给我选择的值)发送回它之前的NavigationController。 我读到了关于AppDelegates,@ property,委托和(正确的“最糟糕”的方式)NSUserDefaults。
请有人告诉我,将tableView2 BACK中的数据传递给tableView1,哪种方式最好(最聪明)?
答案 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的方式确实不错,但我更喜欢制作一个单身,它很好且易于处理。使单身人士存储您的属性。您还可以随时检查属性是否为零。