2

我正在制作一个自定义的后退按钮,它的工作原理与真正的后退按钮完全一样。下面是我的代码

UIButton *cusBack = [UIButton buttonWithType:101];
[cusBack setTitle:@"Back" forState:UIControlStateNormal];
[cusBack addTarget:self action:@selector(clickBack) forControlEvents:UIControlEventTouchUpInside];

self.view addSubView:cusBack;

这是我的选择器:

-(void)clickBack{
PrevPage *pPage = [[PrevPage alloc] init];
[self.navigationController pushViewController:pPage animated:YES];
[pPage release];
}

实际上,它有效,但它创建的方向是从右到左。但我希望页面从左移到右,因为它会回到最近的页面

谢谢你!

4

1 回答 1

0

如果您想具有与后退按钮相同的行为,您应该尝试另一种方法:

-(void)clickBack{          //Your presenting view controller will always be the last view controller on the stack.                  
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-1] animated:YES];
}

此外,如果您需要对之前的视图控制器进行一些更改,您需要做的就是导入它的头文件,然后您可以在弹出视图控制器之前使用它的属性和公共方法。

#import "MyPreviousViewController.h"
...
-(void)clickBack{
[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-1].title = @"Change title for previous view controller";
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-1] animated:YES];
}

目前,您的后退按钮不像真正的后退按钮那样工作,因为您实际上不是将最后一个视图控制器从堆栈中弹出(也释放对象),而是实际上一直在堆栈上推送新的视图控制器。如果这个堆栈变得太大,你可能会遇到一些问题。

于 2012-09-03T11:14:32.053 回答