我有一个UINavigationController
并且我必须保留默认的后退按钮“后退箭头样式”我只想问我是否可以在不构建新按钮的情况下更改后退按钮操作并更改其样式
5 回答
不,如果你想要一个自定义后退按钮,你必须创建一个自定义 UIBarButtonItem,然后将它分配给适当的属性:
self.navigationItem.backBarButtonItem = myCustomBackItem;
AFAIK 您无法更改默认后退按钮本身的操作,但您可以将 UIBarButtonItem 作为 leftBarButtonItem 放置在那里并分配您自己的操作。
如果定义了 leftBarButtonItem,则显示此按钮,而不是默认的后退按钮。
但是,在执行此类技巧时,请牢记 GUI 指南。
一旦你推送一个新的 UIView,UINavigationBar 中的后退按钮就会自动生成。为了让您自定义后退按钮是创建一个新的 UIToolBar + 一个 UIBarButtonItem 与自定义视图。
下面的代码是在 UIToolBar 中使用自定义 UIBarButtonItem 的示例。
// create button
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
// add to toolbar, or to a navbar (you should only have one of these!)
[toolbar setItems:[NSArray arrayWithObject:backItem]];
navItem.leftBarButtonItem = backItem;
下面的链接是PSD格式的iOS按钮设计,供进一步修改。
您可以制作自定义按钮并对其进行操作,但您不能更改默认的 backButton 操作.....
self.navigationItem.leftBarButtonItem = getBackBtn;
UINavigationController 在推送和弹出 ViewController 时向其委托发送消息。
<UINavigationControllerDelegate>
您可以通过执行以下操作并在 .h 文件中添加来了解何时按下后退按钮
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.navigationController.delegate = self;
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
self.navigationController.delegate = nil;
}
-(void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated{
//Test here if the View Controller being shown next is right below the current
// ViewController in the navigation stack
//
//Test by:
// 1. comparing classes, or
// 2. checking for a unique tag that you previously assigned, or
// 3. comparing against the [navigationController viewControllers][n-2]
// where n is the number of items in the array
if ([viewController isKindOfClass:NSClassFromString(@"ViewControllerClassThatGetsPushedOnBACK")){
//back button has been pressed
}
if (viewController.tag == myUniqueTagIdentifier){
//back button has been pressed
}
if ([navigationController.viewControllers[navigationController.viewControllers.count-2]==viewController]){
//back button has been pressed
}
}
Apple Docs UINavigationController 类参考:
根视图控制器在数组中的索引 0 处,后视图控制器在索引 n-2 处,顶部控制器在索引 n-1 处,其中 n 是数组中的项目数。