0

私は非常に奇妙な問題に巻き込まれました。私はそれをカスタマイズするために独自の UITabBarController を作成しましたが、それはかなりうまく機能します...モーダルビューを除いて。アニメーションでモーダル ビュー (UITabBarController から表示/非表示) を閉じると、アニメーションが終了するまで待機し、タブ バーの最初のコントローラーに移動します!

なぜコントローラーが変わるのですか?どうすれば修正できますか?

ありがとう

PS: 私の UITabBarController ビューはメイン ウィンドウにあり、その上に UITabBar があります。コントローラー (タブ バーによって管理される) は、高さが短いタブ バー コントローラー ビュー上のメイン ウィンドウにあります。モーダル ビューを表示するときは、タブ バー コントローラー ビューを前面に表示します。

4

3 に答える 3

1

私の最初の回答に対するあなたのコメントを読んだ後、コードを見ずに何が問題なのかを理解することは非常に困難ですが、あなたが何をしているのかをよりよく理解しています。UIViewController1 つのタブ付きビューにモーダル ビュー コントローラーを表示するボタンがあるカスタム タブ バー コントローラー (からサブクラス化) を使用して別のプロジェクトを作成しました。モーダル ビューを閉じると、元のタブに戻ります。

あなたの質問では、タブバーによって管理されるView Controllerがメインウィンドウにあり、モーダルビューを表示するときにタブバーコントローラービューを前面に表示すると言います。これは私には意味がありません。

この例では、2 つのタブ バー アイテムと 2 つのビュー コントローラーを含むタブ バーCustomTabBarControllerのサブクラスとインスタンス変数を作成しました。UIViewControllerタブ バーとメンバー ビュー コントローラーの両方のビューをビューのサブビューとして追加しましたCustomTabBarController(タブ バーと重ならないように、ビュー コントローラーのビューのフレームを設定しました)。CustomTabBarControllerまた、タブ バーのデリゲートとして を設定しました。タブ バーの項目が選択されると、適切なサブビューを引数として のビューにメッセージを送信しbringSubviewToFront:ます。CustomTabBarController

メンバー ビュー コントローラー ビューの 1 つには、タップするとモーダル ビューを表示するボタンがあります。ボタンがタップされたときにView Controllerを呼び出すことができますpresentModalViewController:が、タブバーコントローラーがそれを行っていると言ったので、View ControllerにIBActionメソッドがあります(これはモーダルビューを表示するボタンのターゲットです)CustomTabBarControllerへの呼び出しを行う のメソッドpresentModalViewController:。ビュー コントローラーには ivar がありますCustomTabBarController(ビュー コントローラーはこれに属しているため、CustomTabBarController簡単に設定できました)。

モーダル ビュー コントローラー クラスにも ivar がありCustomTabBarController( を呼び出す直前にこれを設定presentModalViewController:します)、モーダル ビューにはモーダル ビューを閉じるボタンがあります。そのボタンはモーダル ビュー コントローラー クラスの IBAction に接続され、CustomTabBarController.

このようにすると、すべてが期待どおりに機能します。カスタム タブ バー コントローラーを作成する理由があると思いますが、それが本当に必要かどうかは疑問です。これが役立つことを願っています。

于 2010-04-28T22:05:59.240 に答える
0

いくつか質問があります:

1)「独自の UITabBarController を作成した」と言うとき、UITabBarController をサブクラス化したということですか?

2) モーダル ビュー コントローラーを表示するための呼び出しはどのように行われますか? モーダルView Controllerを表示するための呼び出しを行うボタンまたはタップされているものはありますか?

コントローラーは「メインウィンドウにある」と言い、モーダルビューを表示すると「タブバーコントローラービューを前面に表示する」と言います。これは私を混乱させます。ビュー コントローラは、タブ バー コントローラに「属する」必要があります。

私は小さなプロジェクトを作成し、それを機能させたので、私がしたことは次のとおりです。

1) UITabBarController のサブクラスを作成しました。

@interface MyTabBarController : UITabBarController
{
}

- (IBAction)presentModalView:(id)sender;
- (void)dismissModalview;

@end


@implementation MyTabBarController

- (IBAction)presentModalView:(id)sender
{
    MyModalViewController* myModalView = [[MyModalViewController alloc] initWithNibName:@"ModalView" bundle:nil];
    [myModalView setTbc:self];
    [self presentModalViewController:myModalView animated:YES];
}

- (void)dismissModalview;
{
    [self dismissModalViewControllerAnimated:YES];
}
@end

2) 次に、モーダル ビュー コントローラー用に、UIViewController のサブクラスを作成しました。

@interface MyModalViewController : UIViewController
{
    MyTabBarController* tbc;
}

@property (retain) MyTabBarController* tbc;

- (IBAction)returnToTabBar:(id)sender;

@end


@implementation MyModalViewController

@synthesize tbc;

- (IBAction)returnToTabBar:(id)sender;
{
    [tbc dismissModalview];
}

@end

3) タブ バー コントローラーを MainWindow.xib にドラッグし、そのファイルの所有者を MyTabBarController に設定し、ビュー コントローラーを両方のタブに追加しました (インスペクターを使用してそれぞれの背景色を異なる色に設定しました)。2 番目のタブのビュー コントローラーにボタンを追加し、そのターゲットを MyTabBarController のアクション「presentModalView:」に設定しました。

4) ModalView というビューを含む新しい xib を作成し、そのファイルの所有者を MyModalViewController に設定しました。ビューの背景色を上記の 2 つとは異なる色に設定し、ビューにボタンを追加しました。ボタンのターゲットを MyModalviewController のアクション「returnToTabBar:」に設定します。

明らかに、アプリ デリゲートのウィンドウのサブビューにタブ バー ビューを追加する必要がありました。これは私にとってはうまくいき、2番目のタブにいるときにモーダルView Controllerを表示し、それを閉じるとタブバーコントローラーの2番目のタブに戻りました。

これが役立つことを願っています!

于 2010-04-27T03:11:14.157 に答える
0

あなたは多くの (やりすぎ?) 初期化作業を行っているのではないかと思いますが、viewDidLoadそのうちの 1 つが最初のタブの選択ですか?

カスタム タブ バー コントローラー クラスの初期化/読み込みのシーケンスを共有していただけないでしょうか?

モーダル ビューが表示されている間はタブ バー コントローラー ビューがアンロードされ、モーダル ビューが閉じられるとリロード (呼び出しviewDidLoad) される場合があります。

私のアドバイスは、タブ切り替えとビュー読み込みメソッドにいくつかのデバッガー ブレークポイントを設定し、コール スタックを調べて、タブ バー コントローラーのライフサイクルが理解と一致することを確認することです。

于 2010-07-12T16:19:51.190 に答える