我知道当另一个视图控制器被推送到堆栈上时,viewcontroller's导航项的backBarButtonItem就会显示出来,这是从顶部数第二个viewcontroller。
我有一个视图控制器A,它在viewDidLoad中有以下内容
{
[super viewDidLoad];
self.navigationController.navigationBarHidden = NO;
[self.navigationItem setBackBarButtonItem:[UIBarButtonItem itemWithImageNamed:@"ic_header_slide" selectedImage:nil target:nil action:nil]];
}当我按下viewcontroller B时,这个自定义的后退按钮不会显示,相反,我看到的是iOS创建的默认后退按钮。
A扩展了UITableViewController,B扩展了UIViewController。我没有在这些navigationItem中设置leftBarButtonItem、leftBarButtonItems、rightBarButtonItem、rightBarButtonItems。
编辑我读过关于设置leftBarButtonItems的内容。在B上设置works项可以工作。但我认为在A上设置backBarButtonItem是正确的方法。文档中也提到了这一点,但在我的情况下不起作用。我想问backBarButtonItem中是否有bug,或者我对它的工作方式有一些误解,我做得不正确。
发布于 2015-08-10 22:56:18
要隐藏导航栏的默认后退按钮,请使用
self.navigationItem.hidesBackButton=TRUE;也可以使用以下方法添加自定义BarButtons。
- (NSArray*)getLeftNavButtons:(NSString*)image andTarget:(id)target andFrame:(CGRect)frame andSpace:(int)fixedSpace
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = frame;
button.clipsToBounds = YES;
[button setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
[button addTarget:target action:@selector(leftNavBtnClicked) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc]initWithCustomView:button];
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7"))
{
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
negativeSpacer.width = fixedSpace;
return @[negativeSpacer,barButton];
}
else{
return @[barButton];
}
return @[barButton];
}发布于 2015-08-10 23:00:19
只需覆盖默认设置
self.navigationItem.hidesBackButton = YES;
UIBarButtonItem *back = [[UIBarButtonItem alloc]init];
back.title = @"Pick Me";
back.image = @"Your image";
[self.navigationItem setLeftBarButtonItem:back];发布于 2015-08-11 17:21:26
设置右侧栏按钮项
self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]init];
UIImage *img1=[UIImage imageNamed:@"edit"];
CGRect frameimg1 = CGRectMake(0, 0, img1.size.width, img1.size.height);
UIButton *signOut=[[UIButton alloc]initWithFrame:frameimg1];
[signOut setBackgroundImage:img1 forState:UIControlStateNormal];
[signOut addTarget:self action:@selector(btnEditClicked:)
forControlEvents:UIControlEventTouchUpInside];
// [signOut setShowsTouchWhenHighlighted:YES];
UIBarButtonItem *barButton=[[UIBarButtonItem alloc]initWithCustomView:signOut];
self.navigationItem.rightBarButtonItem=barButton;设置左栏按钮项
UIImage *img11=[UIImage imageNamed:@"home"];
CGRect frameimg11 = CGRectMake(0, 0, img11.size.width, img11.size.height);
UIButton *signOut1=[[UIButton alloc]initWithFrame:frameimg11];
[signOut1 setBackgroundImage:img11 forState:UIControlStateNormal];
[signOut1 addTarget:self action:@selector(showLeftMenuPressed:)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton1=[[UIBarButtonItem alloc]initWithCustomView:signOut1];
self.navigationItem.leftBarButtonItem=barButton1;
self.navigationController.navigationBar.barTintColor=ColorNav;
self.navigationController.navigationBar.translucent=FALSE;设置导航标题和颜色
self.title = titletext;
[[[self navigationController] navigationBar]setTitleTextAttributes:@{NSForegroundColorAttributeName: textColor}];

https://stackoverflow.com/questions/31922558
复制相似问题