2010-06-04 79 views
2

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

现在我的问题是当你点击那个按钮时会触发哪个事件?也有可能改变导航栏中后退按钮的文本?

任何帮助将不胜感激?

谢谢

回答

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; 
} 

请注意,布尔值goSoScreen和goingToSubscreen应设置为named。如果您将另一个视图推到View2之上的导航控制器上,则应该将goingToSubscreen设置为YES,以便它不执行重要的操作。相反,您应该在按View2后将ViewToSubscreen上的wentToSubscreen设置为YES,以便当它再次出现时,它从该屏幕返回后会发生一些有趣的事情,而不是当View1最初出现时。

编辑: 作为的iOS 5.0的,我相信都内置了这个特性。在按下后退按钮的情况下,在viewWillDisappear:viewDidDisappear:期间,isBeingDismissed设置为YES。作为参考,您可以检查的属性是:

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]; 
0

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

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

不过,这并不钩如果视图控制器弹出,推过自将调用popToViewController:动画:具有低于自控制器在堆或popToRootViewController:动画: