NavigationBar とツールバーを持つ NavigationController ベースの iPhone アプリがあります。これが基本的にどのように機能するかです:
applicationDelegate は、"SplashScreen" をモーダル ビューとして RootViewController にプッシュします。スプラッシュ スクリーンが表示されている間、アプリケーションは何らかの作業を行い、ユーザーの位置に基づいてモーダル ビューを閉じるか、モーダル ビューを閉じて別のビューをナビゲーション スタックにプッシュします。
RootViewController と子ビューの両方に、[追加] ボタンのあるツールバーがあります。私の問題は次のとおりです。2 番目のビューが自動的にプッシュされると、[追加] ボタンがその PARENT コントローラーのコードを呼び出します。これを閉じてから追加ボタンをもう一度押すと、正しいコードが呼び出されます。
これが私のコードの一部です。
私が持っているRootViewControllerのviewDidLoadで:
addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addClicked:)];
[self setToolbarItems:[NSArray arrayWithObjects:addButton, nil]];
私が持っている子コントローラ(LocationListsController)のviewDidLoadで:
addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addClicked:)];
[self setToolbarItems:[NSArray arrayWithObjects:addButton, nil]];
(はい、同じコードです。どちらにも addClicked イベントがあります)
RootViewController では、viewWillAppear は実際に子ビューをプッシュする場所です。
if (((GeoListsAppDelegate *)[[UIApplication sharedApplication] delegate]).selectedIndex != -1)
{
GeoLocation *location = [((GeoListsAppDelegate *)[[UIApplication sharedApplication] delegate]).locations objectAtIndex:((GeoListsAppDelegate *)[[UIApplication sharedApplication] delegate]).selectedIndex];
((GeoListsAppDelegate *)[[UIApplication sharedApplication] delegate]).selectedIndex = -1;
if (lController == nil)
{
LocationListsController *aController = [[LocationListsController alloc] initWithLocation:location];
self.lController = aController;
[aController release];
}
[[self navigationController] pushViewController:lController animated:YES];
}
ビューのプッシュは正常に機能します。私が持っている唯一の問題は、ツールバーの addButton です。誰にもアイデアはありますか?