我有一个带有push segue的UIViewController A到UIViewController B,在某些情况下我需要重复这个例子:
ViewController A -> ViewController B -> ViewController A -> ViewController B
我还需要从ViewController B -> ViewController A
我不想创建4个ViewControllers,那么在这种情况下如何回收代码呢?
答案 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];
}