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

How to go back to previous view controller?

我有一个 UIViewController A,将 segue 推送到 UIViewController B,在某些情况下我需要重复这个,例如:

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

我还需要从 ViewController B -> ViewController A

传递数据

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

您只需推送和弹出相同的视图控制器。

如果您希望 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 {
...
}

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

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

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

-(void)configureWithData:(WhateverDataType *)paramData

在为 segue 做准备时,您将获得对目标视图控制器的引用并像这样传递数据:

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