1

私は iOS プログラミングが初めてで、比較的簡単に実装できると思われるものに多くの時間を費やしています。確かにこれは初心者の質問ですが、答えが見つからないようです。

現在、iOS VoIP アプリを開発しています。この段階で、システムは通話が設定されるたびに「CallingViewController」に切り替わります。通話が切断されるたびに、ビューは消えます (ポップ)。

私の階層:


    • navigationController : UINavigationController (window.rootViewController)
      • AppController : UIViewController (navigationController.rootView)
        • TabBarController : UITabBarController
          • DialerViewController : UIViewController
        • LoginViewController : UIViewController
        • CallingViewController : UIViewController

AppController は、VoIP 関連のすべてのコーディングによってトリガーされる状態とイベントに基づいて、ビューをロードおよび非表示にするクラスであると想像しました。

たとえば、私が使用する AppController では [self.navigationController pushViewController:tabBarController animated:YES]; . コントローラーを押しても問題はないようで、すべてが期待どおりに機能します。

tabBarController を押すと、DialerView がフォーカスされます (現時点ではこれが te タブの唯一のビューであり、後でたとえば、Dialer、Settings、Contacts、Call History が含まれます)。ユーザーは番号を入力し、「VoIP Call」を押します。コールバック (voiplibrary->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 を取り除くために使用するコードはすべて実行されますが (そのようです)、View は変更されません。

4

1 に答える 1

0

それがあなたの問題の原因であるかどうかはわかりませんが、ドキュメントによると

為に

pushViewController:animated:

方法

このオブジェクトは、タブ バー コントローラーのインスタンスにすることはできません。また、ナビゲーション スタック上にまだ存在していてはなりません。

于 2012-08-09T08:12:08.787 に答える