我是 iOS 编程的新手,我在本应相对容易实现的东西上花费了太多时间。当然这是一个初学者的问题,但我似乎无法找到答案。
我目前正在开发一个 iOS VoIP 应用程序。在这个阶段,只要建立呼叫,系统就会切换到“CallingViewController”。每当呼叫断开时,视图应该消失(弹出)。
我的层次结构:
- 窗户
- 导航控制器:UINavigationController(window.rootViewController)
- AppController : UIViewController (navigationController.rootView)
- 标签栏控制器:UITabBarController
- 拨号器视图控制器:UIViewController
- 登录视图控制器:UIViewController
- 调用视图控制器:UIViewController
- 标签栏控制器:UITabBarController
- AppController : UIViewController (navigationController.rootView)
- 导航控制器:UINavigationController(window.rootViewController)
我想象 AppController 是一个类,它根据所有 VoIP 相关编码触发的状态和事件来加载和隐藏视图。
例如在我使用的 AppController 中 [self.navigationController pushViewController:tabBarController animated:YES];
。推动控制器似乎不会导致任何问题,一切都按预期运行。
按下 tabBarController 会导致 DialerView 获得焦点(它现在是选项卡中的唯一视图,稍后它将包含:拨号器、设置、联系人、通话记录)。用户输入一个号码并按下“VoIP 呼叫”。通过回调(voilibrary->OnCallStateChange -> 最终 AppController.OnCallStateChange),系统可以确定 Call (callId) 的状态已更改为“SET UP”并将推送(在 AppController 中) [self.navigationController pushViewController:CallingViewController animated:YES];
。
通过相同的回调函数,系统还将确定呼叫已经结束。然而,使用 popViewController 或任何变体,它都不起作用。ViewController 保持在顶部。我开始使用 NSLog 进行日志记录,它出现了 CallingView:loads、willappear、didappear 和 willdisappear。DidDisappear 但是不会被调用。系统也确实确定呼叫已终止,再次通过 NSLog 检查。所以我用来摆脱 CallingViewController 的任何代码都会被执行(看起来),但是视图不会改变。