我有导航控制器。在这个控制器的第二个视图中,我创建了一个名为“back”的后退按钮。在这个方法中我调用“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.
}
}
的方案:
但是,如果我关闭了View Controller,那么列表中的项目4如何在“popViewControllerAnimated”之后工作?我该如何解决这个问题?
答案 0 :(得分:1)
您可以将通信逻辑放在中心类(可能是单例)中吗?它有责任与后端通信。收到答复后,会发送通知。某些类应该收到通知并添加一个新的视图控制器。
像我在这篇帖子中建议的那样: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];
}
}
收听通知的好地方是当前视图之前的视图控制器。