如何在独立的UINavigationBar中为自定义后退按钮指定操作?

时间:2011-07-07 18:34:47

标签: uinavigationbar uinavigationitem

我在屏幕上有一个自定义的UINavigationBar,即没有导航控制器,如下面所定义,它包含一个带有标题为“Media”的后退按钮和动作“mediaViewComplete”。但是,点击按钮时不会调用mediaViewComplete方法。如何为“后退”按钮指定操作?

self.navigationBar=[[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)];
navigationBar.barStyle=UIBarStyleBlackTranslucent;

UINavigationItem *navigationItem=[[UINavigationItem alloc]init];
UIBarButtonItem *backButton=[[UIBarButtonItem alloc]initWithTitle:@"Media" style:UIBarButtonItemStylePlain target:self action:@selector(mediaViewComplete)];
navigationItem.backBarButtonItem=backButton;
[self.navigationBar pushNavigationItem:navigationItem animated:NO];

navigationItem=[[UINavigationItem alloc]init];
UIBarButtonItem *editButton=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editCategorization)];
navigationItem.rightBarButtonItem=editButton;
[self.navigationBar pushNavigationItem:navigationItem animated:NO];

[self.view addSubview:navigationBar];

[editButton release];
[backButton release];
[navigationItem release];

1 个答案:

答案 0 :(得分:1)

问题在于你正在使用:

navigationItem.backBarButtonItem = backbutton;

backBarButtonItem有自己的事件,不会被你的action:option覆盖。实际上,Apple指南声明您应该使用“nil”作为backBarButtonItem的操作。 backBarButtonItem不归当前视图控制器所有。

如果您不关心按钮的箭头形状,则应使用leftBarButtonItem。如果你想创建具有箭头形状的完全自定义后退按钮,你将不得不做一些自定义魔术。幸运的是,大部分工作都是为您完成的:

http://idevrecipes.com/2011/01/12/how-do-iphone-apps-instagramreederdailybooth-implement-custom-navigationbar-with-variable-width-back-buttons/

下载此项目并查看结果。它甚至包含保留箭头形状自定义后退按钮所需的图像。这是更多的工作,但它更少黑客。