在 ios 中为 UINavigationitem(左栏按钮项)设置图像

Posted

技术标签:

【中文标题】在 ios 中为 UINavigationitem(左栏按钮项)设置图像【英文标题】:Setting image for UINavigationitem (Leftbarbutton item) in ios 【发布时间】:2014-05-15 03:23:08 【问题描述】:

我正在尝试使用以下代码为 UIBarButtonItem 设置图像。但它在导航栏中显示为空白图像。请帮我解决问题。我对 ios 完全陌生。

[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:38.0/255.0 green:126.0/255.0 blue:202.0/255.0 alpha:0.5]];
UIBarButtonItem *lftbarbtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"Cross_Icon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(additem)];
[self.navigationItem setLeftBarButtonItem:lftbarbtn];

提前谢谢你......

【问题讨论】:

你确定图片[UIImage imageNamed:@"Cross_Icon.png"] 你的代码没问题。我认为问题在于您的图像名称。检查一下。 图片名称没问题。 我使用下面的代码实现了输出。 UIImage *img = [UIImage imageNamed:@"Cross_Icon.png"]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(0, 0, img.size.width, img.size.height); [btn setBackgroundImage:img forState:UIControlStateNormal]; [btn addTarget:self action:@selector(Cancelaction) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *lftbtn = [[UIBarButtonItem alloc]initWithCustomView:btn]; self.navigationItem.leftBarButtonItem=lftbtn; 但是请任何人解释为什么不能使用 UIBarButtonItem *lftbtn = [[UIBarButtonItem alloc]initWithImage:img style:UIBarButtonItemStyleBordered target:self action:@selector(cancelaction)]; self.navigationItem.leftBarButtonItem=lftbtn; 【参考方案1】:
 UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(popToBack)];      //create the left bar button

 self.navigationItem.leftBarButtonItem = leftBarButton;   //assign into navigation item

 self.navigationItem.leftBarButtonItem.tintColor=[UIColor colorWithRed:125.0/255.0 green:90.0/255.0 blue:146.0/255.0 alpha:1];   //set the tint color

 [leftBarButton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor purpleColor],  UITextAttributeTextColor,nil] forState:UIControlStateNormal];    //text color


-(void)popToBack

[self.navigationController popToRootViewControllerAnimated:YES];
 

另一种选择

UIButton *leftbutton =  [UIButton buttonWithType:UIButtonTypeCustom];
[leftbutton setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[leftbutton addTarget:target action:@selector(buttonAction)forControlEvents:UIControlEventTouchUpInside];
[leftbutton setFrame:CGRectMake(0, 0, 53, 31)];
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(3, 5, 50, 20)];
[label setFont:[UIFont fontWithName:@"Arial-BoldMT" size:13]];
[label setText:title];
label.textAlignment = UITextAlignmentCenter;
[label setTextColor:[UIColor whiteColor]];
[label setBackgroundColor:[UIColor clearColor]];
[leftbutton addSubview:label];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView: leftbutton];
self.navigationItem.leftBarButtonItem = barButton;

-(void) buttonAction

[self.navigationController popToRootViewControllerAnimated:YES];
 

【讨论】:

感谢您的帮助。我通过使用 UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView: leftbutton]; 得到了答案但是您可以使用以下方法将图像初始化为 uinavigationitem 吗? Bcoz 我已经在我的代码中尝试过了。但是图像显示为空白区域。 UIBarButtonItem *lftbtn = [[UIBarButtonItem alloc]initWithImage:img style:UIBarButtonItemStyleBordered target:self action:@selector(buttonaction)]; self.navigationItem.leftBarButtonItem=lftbtn; 我是 ios 新手。我目前正在学习使用 uinavigationcontroller。你能告诉你使用下面的方法是不可能的吗 UIBarButtonItem *lftbtn = [[UIBarButtonItem alloc]initWithImage:img style:UIBarButtonItemStyleBordered target:self action:@selector(buttonaction)]; 哦,如果您需要任何帮助,请在 karthik.saral@gmail.com(聊天)上联系我,【参考方案2】:

您不需要直接使用导航栏。使用当前视图控制器的导航项属性来设置 UIBarButtomItems。确保您实际使用的是 navigationController 来设置这些属性。

【讨论】:

感谢您的回复。但我只使用当前视图控制器的导航项属性。这里我当前的视图控制器是 EmployeeListTableViewController 。我已将其分配为应用程序委托本身中 UINavigationController 的根视图控制器。【参考方案3】:
UIButton *ReqMenuBtn = [UIButton buttonWithType:UIButtonTypeCustom];
ReqMenuBtn.frame = CGRectMake(0,0,32,32);
[ReqMenuBtn setBackgroundImage:[UIImage imageNamed:@"reselect.png"] forState:UIControlStateNormal];
[ReqMenuBtn addTarget:self action:@selector(somemethodName:) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *MenuButton = [[UIBarButtonItem alloc]initWithCustomView:ReqMenuBtn];
[self.navigationItem setLeftBarButtonItem:MenuButton];
MenuButton = nil;
ReqMenuBtn = nil;

【讨论】:

这将 100% 工作......我总是使用这个代码......如果你想要更多问我。

以上是关于在 ios 中为 UINavigationitem(左栏按钮项)设置图像的主要内容,如果未能解决你的问题,请参考以下文章

在IOS中隐藏UINavigationItem

我的 UINavigationitem 的 TitleView 在 ios 6 中得到扩展

iOS 11 - 使用大标题模式时的 UINavigationItem titleView

iOS开发:关于UINavigationItem和tintColor的沉思

UINavigationItem:检测触摸

Xcode 6 Segue 与 UINavigationItem