0

私は現在、異なる UINavigationControllers を必要とするアプリに取り組んでいます。そのため、タブ バーを使用し、UITabBar を使用してそれらを交換しようとしているので、アプリで次のようなコードを委任します。

// Setting up the views for the tab controller
Friends *friends = [[[Friends alloc] initWithNibName:@"Friends" bundle:[NSBundle mainBundle]] autorelease];
WifiManager *wifi = [[[WifiManager alloc] initWithNibName:@"WifiManager" bundle:[NSBundle mainBundle]] autorelease];

UINavigationController *locationController = [[UINavigationController alloc] initWithRootViewController:wifi];      
UINavigationController *friendsController = [[UINavigationController alloc] initWithRootViewController:friends];

//Set up the tab controller
tabBarController = [[UITabBarController alloc] init];

tabBarController.viewControllers =
[NSArray arrayWithObjects:locationController, friendsController, nil];

//Add the tab bar to the window
[window addSubview:tabBarController.view];

これにより、最初の UINavigationController がコンパイルされて読み込まれますが、他のナビゲーション コントローラーをクリックすると、次のようになります。

*** -[NSCFData tabBarItem]: unrecognized selector sent to instance 0x1152b0'

最も奇妙な部分は、単一の UINavigationController でタブコントローラーを使用でき、すべてが正常に機能することですが、2番目のものを追加しようとすると、惨めに失敗します-誰かが私がここで間違っていることについて何か考えを持っていますか?

前もって感謝します

ジェームズ

4

3 に答える 3

3

単一のビュー コントローラー (Friends と WifiManager) が 1 つしかない場合に、それぞれが機能することを確認しましたか? 問題は「2 つのコントローラー」ではなく、「壊れた 1 つのコントローラー」である可能性があります。

于 2009-07-21T22:24:52.910 に答える
0

同様の方法で動作するアプリケーションがあります。私がこれを処理する方法は、もう少し抽象化することです。つまり、トップレベル(デフォルトのウィンドウなどの下)をタブバーコントローラーのみにします。ここでカスタムクラスを派生させて、コードを取得できるようにすることをお勧めします。次に、各ナビゲーションバーコントローラーをそのタブバー内(nib構造内)に配置しますが、表示されたときにそれらを追加することだけを心配します。

Interface Builderの使用:IBを使用するのは非常に簡単でした。私のMainWindow.xibファイルでは、トップレベルにすべての通常のもの、Window、汎用UITabBarController、および各UINavigationControllerにプッシュしたいUIViewControllersがあります。UIViewController1bと2b(1aと2aは2つのUIViewControllersです)それぞれのナビゲーションバーのデフォルトビューです)。UITabBarController内にネストされており、UITabBarと2つのUINavigationControllerがあります。それぞれの中に、UINavigationBar、UIViewController、UITabBarItemの順であります。アプリデリゲートでの私のコードは次のようになります。

[window addSubview:tabBarController.view];
[tabBarController setSelectedIndex:0];

次に、navbarを利用したい場合は、次のようにします。

UIViewController* newView = [[UIViewController alloc]initWithNibName:@"newViewController" bundle:nil];
[self.navigationController pushViewController:newView animated:TRUE];
[newView release];

それが私がそれを機能させるのに必要なすべてです(私はいくつかのIB配線を忘れたかもしれません)。

私の最後の考えは、バンドルがあなたのナビバーを台無しにしているかもしれないということです。私はそれを使ったことがなく、長所と短所についてあまり知りませんが、少なくとも一時的に、それが修正されているかどうかを確認するためにそれを殺してみるかもしれません。

于 2009-07-21T15:50:17.450 に答える
0

そのコードは機能するはずです。

私が提案できる唯一のことは、作成しているView Controllerを自動解放しないことです。

于 2009-07-21T18:33:10.460 に答える