如何在iOS中反转Segue时返回信息?
我有两个视图控制器,一个和两个。 我从VC One去VC Two。 在VC二,我select一些数据,我存储在一个数组中。 当我按导航栏上的“返回”button时,我想将该数组发送回VC One。
什么是最好的方法来做到这一点?
谢谢!
为什么不在第二个视图控制器上设置第一个可以注册为的委托属性。 那么当信息被存储到数组时,它也可以传回给它的委托?
为了实现这一点
在第二个视图控制器.h文件的顶部,您需要声明第一个视图控制器可以实现的@protocol
。 协议与其他语言的接口相似。 这是确保对象实现某些方法的一种方式,而不需要特别知道该对象是什么(在这种情况下为视图控制器1)。
@protocol MyDataDelegate - (void)recieveData:(NSArray *)theData @end
并且还为委托声明一个属性,第一个视图控制器可以像之前一样设置它自己,就像之前呈现的那样
@interface SecondViewController @property (nonatomic, weak) id<MyDataDelegate> delegate;
然后在你的第一个视图控制器.h
文件中,像这样实现协议
在.h
文件中
#import SecondViewController.h @interface FirstViewController <MyDataDelegate> //.....
并在.m
中执行协议中声明的方法
@implementation //.... usual methods - (void)recieveData:(NSArray *)theData { //Do something with data here }
为了将第一个视图控制器设置为委托,你需要在使用UIStoryBoardDelegate方法之前拦截这个segue。 将其添加到第一个视图控制器
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { //Get a handle on the view controller about be presented SecondViewController *secondViewController = segue.destinationViewController; if ([secondViewController isKindOfClass:[SecondViewController class]]) { secondViewController.delegate = self; } }
现在你有一个指向第一个视图控制器的指针,并且可以调用方法并传回数据,通过在第二个视图控制器中调用以下方法
[self.delegate recieveData:theArrayData];
你也可以在协议中添加另一个方法来通知委托人第二个视图控制器正在被解散。 或者使用其他答案中的一些build议
如果您使用的是iOS 6,则可以使用UnwindSegues将信息返回到堆栈。
可能最简单的方法是使用NSNotification
。 在你的prepareForSegue:
让VC One听VC Two的自定义通知。 当VC Two想要发送数组(可能在其viewWillDisappear
,它发布该通知并将该数组作为通知对象传递。 VC One会收到通知,此时停止监听并使用arrays。