如何定位 UIBarButtonItem 并向其添加图像?
Posted
技术标签:
【中文标题】如何定位 UIBarButtonItem 并向其添加图像?【英文标题】:How to position a UIBarButtonItem and add an image to it? 【发布时间】:2014-09-19 17:42:36 【问题描述】:截图在这里:Screenshot
嘿,
我不是编码员,除了一些 html/CSS 之外我没有很多经验。我只是一个尝试构建他的第一个应用程序的普通人:)
这是我当前的问题:我想为 UINavigationBar 中的每个按钮提供自己的图像并定位它们,以便它们位于栏上,而不是像屏幕截图中显示的那样挂在栏上。我希望左键位于最左角,右键位于最右端,再加上它们都向上一点。
现在我已经设法至少为所有按钮提供相同的图像(通过 UIBarButtonIteam 外观)。当然这不是我的本意。每个按钮都应该有自己的图像。
你能帮我解决这个问题吗?完成这项工作的最简单方法是什么?我也在使用 Xcode 5 / ios 7。
【问题讨论】:
【参考方案1】:这段代码肯定对你有帮助:
UIImage *bar_img=[UIImage imageNamed:@"yourbarimage.png"]; [self.navigationController.navigationBar setBackgroundImage:bar_img forBarMetrics:UIBarMetricsDefault];
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *backBtnImage = [UIImage imageNamed:@"YourImage.png"] ;
[backBtn setBackgroundImage:backBtnImage forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(ActionOnClick) forControlEvents:UIControlEventTouchUpInside];
backBtn.frame = CGRectMake(0, 0, 44, 44);
UIView *backview=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
[backview addSubview:backBtn];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backview] ;
self.navigationItem.leftBarButtonItem = backButton;
[self.navigationController.navigationBar setHidden:NO];
【讨论】:
就是这样!我不得不对 CGRectMake 进行一些试验,但我可以将按钮放置在需要的位置,并且它还有一个背景图像。唯一的问题是按钮不再起作用。这就是在我添加您的代码_barButton.target = self.revealViewCrontroller
和_barButton.target = @selector(revealToggle:);
之前它正在做的事情。你能帮我解决这个问题吗?
我自己发现了问题!在玩的时候,我做了以下设置:GCRectMake(0, 0, 0, 44)];
,这可能意味着它不再是一个形状,而是一个笔划,因此无法点击。我把它改成了GCRectMake(0, 0, 44, 44)];
现在它就像一个魅力。道具给你!我很想赞成你的回答,但我现在没有足够的声誉:(【参考方案2】:
您应该使用initWithImage:style:target:action
,而不是使用外观代理(它将设置 UIBarButtonItem 的每个实例的样式)。
【讨论】:
【参考方案3】:试试这个代码可能对你有帮助....
UIButton *done=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
[done setBackgroundImage:[UIImage imageNamed:@"imageName.png"] forState:UIControlStateNormal];
UIBarButtonItem *done1=[[UIBarButtonItem alloc]initWithCustomView:done];
【讨论】:
谢谢。但这会导致警告:“未使用的变量'done1'”。你知道为什么会这样吗? 在上面的代码中我想说的是,添加您自己的按钮添加分配给您的导航栏按钮..就像我分配'done1'按钮。【参考方案4】:试试这个。
它会帮助你。在 ios 6 和 ios 7 中
UIImage *image = [UIImage imageNamed:@"filer_iphone.png"];
//for only ios 7
if ([UIImage instancesRespondToSelector:@selector(imageWithRenderingMode:)])
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *item=[[UIBarButtonItem alloc]
initWithImage:image style:UIBarButtonItemStyleBordered target:self action:@selector(onSettingsClicked:)];
[self.navigationItem setRightBarButtonItem:rightBarButoom];
同样适用于左侧 UIBarButton。
【讨论】:
非常感谢,但我收到警告:“未声明的选择器 'onSettingsClicked' 以及错误:“使用未声明的标识符 'rightBarButoom'”。正如我之前提到的,我绝不是一个编码员,我只是不知道这意味着什么。 嘿,它是你必须声明的选择器。 我已经尝试用谷歌搜索,但我似乎无法理解这意味着什么。从我目前得到的信息来看,我必须用括号来调用方法的名称,对吧?那么我必须先为按钮创建一个方法吗?以上是关于如何定位 UIBarButtonItem 并向其添加图像?的主要内容,如果未能解决你的问题,请参考以下文章