在 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(左栏按钮项)设置图像的主要内容,如果未能解决你的问题,请参考以下文章
我的 UINavigationitem 的 TitleView 在 ios 6 中得到扩展
iOS 11 - 使用大标题模式时的 UINavigationItem titleView