1

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 です。誰にもアイデアはありますか?

4

1 に答える 1

0

viewWillAppear ではなく、viewDidAppear から「子」View Controller をプッシュしてみてください。

于 2010-01-22T11:38:30.857 に答える