如何定位 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 并向其添加图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表中创建新列并向其添加值

如何在提升进程间构造具有给定计数的向量并向其添加元素

如何删除数据框列中的空格并向其添加字符串“NA”?

如何在 cellTap 事件中获取特定的 RadCalendar Day Cell 并向其添加自定义样式

用属性文本替换文本并向其添加操作

使用 Csharpcodeprovider 创建 DLL 并向其添加资源