我只是一个一般的理论问题,我希望能产生一些回应。我一直在学习 ios,并且有一个我正在修补的视图的项目。它有一个运行循环来管理一个连接到服务器的套接字并在它进入时获取聊天。一个文本视图会更新为新的聊天。现在这个文本视图附加到故事板一。我现在要问,当我添加它时,他们是否会去故事板二(我现在正在阅读这个多页方面),视图中的聊天是否会继续更新,尽管用户当然不会看到它直到他们返回视野。第二个问题是我可以在第一个视图控制器中同时更新故事板 2 和一个。我看到你可以在我的 segue 书中将变量传递给故事板 2,但是我的位于视图控制器一中的套接字运行循环可以访问视图控制器的两个变量吗?如果不是,听起来我需要调查某种队列来将更新从 telnet 传送到故事板 2。
问问题
140 次
1 回答
2
你从一个相当复杂的项目开始——印象深刻。这里有一些关于故事板和 segues 的快速说明。
如果您使用视图控制器设置情节提要,然后将 segue 设置到另一个视图控制器 - 当您创建新的视图控制器时,原始视图控制器仍在内存中,如果您以这种方式编程,仍然可以响应通知或回调。
当您“弹出”或“关闭”您继续使用的视图控制器时,它会从内存中消失。
当你进行 segue 时,你会自动在一个名为
prepareForSeque
. 您可以将此引用存储在一个属性中,并根据需要使用该属性对其进行更新。
所以这是一个伪示例:
- 视图控制器 a 有一些网络代码,我猜当缓冲区被填满时,它会调用视图控制器 a 中的方法。我们称它为 networkMethod 作为参考。在网络方法的一侧,假设您最终得到一个字符串,并且您想将该字符串传递给您的视图控制器 b,以便您可以在那里做一些事情。因此,我们将把它传递给一个方法,而不是仅仅设置一个变量,这样你就可以用它做一些事情了。希望该场景符合您的需求,否则我的示例的其余部分将脱离基础。
任务 - 为视图控制器 b 设置参考。在视图控制器的导入部分中有一个 .h 文件
#import "ViewControllerB.h" //this is the name of your view controller b class
在界面部分(.h 文件)中的视图控制器 a 中添加:
@property (nonatomic, strong) ViewControllerB *viewB;
在你的 .m 文件中,你会触发你 segue - 也许在一个按钮或一些动作上。听起来你已经有了这个:
[self performSegueWithIdentifier:@"viewB" sender:self];
现在创建一个如下所示的新方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
self.viewB = segue.destinationViewController; //this stores a reference for later
}
现在在您的回调方法中,您可以像这样引用视图控制器 b:
-(void)networkCallbackMethod:(NSString*)stringData {
if (self.viewB) {
[self.viewB myCustomMethodUsingPassedData:stringData];
}
}
然后最后在视图控制器 b 中,您将拥有如下匹配方法:
-(void)myCustomeMethodUsingPassedData:(NSString*)stringData {
//update the view here
}
这应该大致为您提供一个框架,您可以在其中设置两个视图控制器,segue 并获取引用,然后根据需要更新新的视图控制器。
希望有帮助。祝你好运。
于 2012-11-30T14:28:01.133 回答