我有导航控制器。在此控制器的第二个视图上,我创建了一个后退按钮,该按钮的操作名为“后退”。在此方法中,我将其称为“ popViewControllerAnimated”方法,问题是,在“ popViewControllerAnimated”之后,我还有其他一些动作也被同时调用,但是在“ popViewControllerAnimated”之后,它们向我展示了,但是我需要阻止它。
当我按下按钮时:
- (void)back {
[socketIO sendEvent:@"exit" withData:nil]; // Send data to server
[self.navigationController popViewControllerAnimated:NO];
}
以及用于解析服务器结果的委托:
- (void)socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet {
if ([packet.name isEqualToString:@"disconnect"]) {
NSLog(@"Exit"); // This code also works, but it works after "popViewControllerAnimated", but I want to block it.
}
}
方案:
用户按下
应用发送到服务器事件“退出”
popViewControllerAnimated
应用收到服务器的答复并显示结果
但是,如果我关闭了View Controller,列表中的项目4在“ popViewControllerAnimated”之后如何工作?如何解决此问题?
最佳答案
您可以将通信逻辑放在中心类(可能是单例)中吗?那有责任与后端通信。收到答案后,它将发送通知。某些类应该收到通知并添加新的视图控制器。
类似于我在此线程中建议的内容:Dismissing view in UINavigationController and at the same time syncing
---编辑以回应评论---
首先,我认为重要的是,下面的类的名称与您要解决的问题更紧密地联系在一起。我给它起了一个通用名称,但是我对选择的名称不满意。
@interface Communicator : NSObject
- (void) sendExit;
+ (Communication *) defaultCommunicator;
@end
在.c中
- (void)socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet {
if ([packet.name isEqualToString:@"disconnect"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"CommunicatorExit" object:boek];
}
}
在当前通知之前,最好使用View Controller来监听通知。
关于ios - 在“popViewControllerAnimated”方法之后调用第二种方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20402280/