toolbarItems没有被视图推送

时间:2010-01-21 23:34:34

标签: iphone uiviewcontroller uinavigationcontroller uitoolbar

我有一个基于NavigationController的iPhone应用程序,它有一个navigationBar和一个工具栏。基本上它是如何工作的:

applicationDelegate将“SplashScreen”作为模态视图推送到RootViewController上。当启动画面启动时,应用程序会执行一些工作,并且根据用户的位置,只需关闭模态视图,或者将关闭模态视图并将另一个视图推送到导航堆栈。

RootViewController和子视图都有带有Add按钮的工具栏。我的问题是:当第二个视图被自动推送时,Add按钮调用其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。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

尝试从viewDidAppear而不是viewWillAppear推送“子”视图控制器。