iPhone应用程序中的导航后退按钮项目事件

时间:2010-06-04 07:30:44

标签: iphone uinavigationbar

我正在开发iPhone应用程序。应用程序顶部有一个导航栏。我有两个视图说“View1”和“View2”。当您按下“View2”视图控制器时,导航栏会显示一个标题为“View1”的后退按钮,以便您可以返回到view1。

现在我的问题是当您点击该按钮时会触发哪个事件?还可以在导航栏中更改后退按钮的文本吗?

任何帮助将不胜感激?

由于

2 个答案:

答案 0 :(得分:5)

没有特定的事件你可以获得该后退按钮。您可以使用各种viewWillAppear:viewWillDisappear:等方法。例如:

//In View2:
- (void) viewWillDisappear:(BOOL) animated {
    [super viewWillDisappear:animated];
    if (!goingToSubscreen) {
        //Do something important here
    }
    goingToSubscreen = NO;
}

//In View1:
- (void) viewWillAppear:(BOOL) animated {
    [super viewWillAppear:animated];
    if (wentToSubscreen) {
        //Do something important here
    }
    wentToSubscreen = NO;
}

请注意,booleans goToSubscreen和goingToSubscreen应设置为named。如果要将另一个视图推送到View2顶部的导航控制器上,则应将goToSubscreen设置为YES,这样它就不会执行重要操作。相反,在推送View2之后,你应该在View1上将goToSubscreen设置为YES,这样当它再次出现时,它会在从该屏幕返回后发生一些有趣的事情,而不是在最初出现View1时。

修改 从iOS 5.0开始,我相信有内置属性。如果您按下后退按钮,isBeingDismissedYES期间viewWillDisappear:设置为viewDidDisappear:。作为参考,您可以检查的属性是:

isMovingFromParentViewController
isMovingToParentViewController
isBeingPresented
isBeingDismissed

至于更改后退按钮的标题,属性属于上一个视图的后退按钮项:

View1.navigationItem.backBarButtonItem.title = @"My New Title";

或:

View1.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"New Title" style:UIBarButtonItemStyleBordered target:nil action:nil] autorelease];

您的第三个选择是使用自定义按钮替换后退按钮。它将允许您指定自己的方法来调用,因此您不需要使用-viewWillDisappear:,但这样做会将按钮显示为矩形而不是后退箭头按钮。此按钮位于View2而不是View1:

View2.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"New Title" style:UIBarButtonItemStyleDone target:self action:@selector(dismissView)] autorelease];

答案 1 :(得分:0)

我正在使用此解决方案来挂钩弹出视图控制器。

// In some view controller
- (void) viewDidDisappear:(BOOL)animated
{
    if (self.navigationController == nil) {
        // popped from navigation stack.
        // do something...
    }
}

但它没有挂钩弹出如果视图控制器,推过自我将调用popToViewController:animated:控制器在self下面的堆栈或popToRootViewController:animated: