如何回到以前的视图控制器?

时间:2015-02-22 14:39:13

标签: ios objective-c iphone uiviewcontroller segue

我有一个带有push segue的UIViewController A到UIViewController B,在某些情况下我需要重复这个例子:

ViewController A -> ViewController B -> ViewController A -> ViewController B

我还需要从ViewController B -> ViewController A

传递数据

我不想创建4个ViewControllers,那么在这种情况下如何回收代码呢?

2 个答案:

答案 0 :(得分:1)

您可以简单地按下并弹出相同的视图控制器。

如果您希望B与A通信,则在A处设置协议,该协议与B进行通信(或实施协议的人)

B代码

@protocol MyProtocol <NSObject>
-(void)callFromB:(id)data;
@end
@property (weak) id <MyProtocol> delegate;

实现:

if ([self.delegate respondsToSelector:@selector(callFromB:)]){
        [self.delegate callFromB:data];
    }

代码

B.delegate = self;
-(void)callFromB:(id)data {
...
}

答案 1 :(得分:0)

你不应该回收它们。我的意思是你不应该回收那些视图控制器的具体实例。 当然可能有一些技术实现允许这样做,但它(与表视图单元格相反)不是必需的。

您正在尝试过早优化。只需根据需要创建新的视图控制器实例。任何支持iOS6及更高版本的iPhone都可以毫无问题地处理。

传递数据可以通过方便的方法完成,例如

-(void)configureWithData:(WhateverDataType *)paramData

在准备segue时,您将获得对目标视图控制器的引用并传递如下数据:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    CustomViewController *nextViewController = [segue destinationViewController];
    [nextViewController configureWithData:someData];
}