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