我正在开发iPhone应用程序。应用程序顶部有一个导航栏。我有两个视图说“View1”和“View2”。当您按下“View2”视图控制器时,导航栏会显示一个标题为“View1”的后退按钮,以便您可以返回到view1。
现在我的问题是当您点击该按钮时会触发哪个事件?还可以在导航栏中更改后退按钮的文本吗?
任何帮助将不胜感激?
由于
答案 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开始,我相信有内置属性。如果您按下后退按钮,isBeingDismissed
和YES
期间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: