我想用自定义图像创建一个UIBarButtonItem,但我不想要iPhone添加的边框,因为我的图像有一个特殊的边框 .
它与后退按钮相同,但是前进按钮 .
这个应用程序是针对inHouse项目的,所以我不在乎Apple是拒绝或批准它还是喜欢它:-)
如果我使用UIBarButtonItem的initWithCustomView:v属性,我可以这样做:
UIImage *image = [UIImage imageNamed:@"right.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
[button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateHighlighted];
button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
[button addTarget:self action:@selector(AcceptData) forControlEvents:UIControlEventTouchUpInside];
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];
[v addSubview:button];
UIBarButtonItem *forward = [[UIBarButtonItem alloc] initWithCustomView:v];
self.navigationItem.rightBarButtonItem= forward;
[v release];
[image release];
这有效,但如果我必须在10个视图中重复此过程,这不是DRY .
我想我必须继承,但是什么?
-
NSView?
-
UIBarButtonItem?
谢谢,
问候,
9 回答
您可以向UIBarButtonItem添加方法,而无需使用自定义类别对其进行子类化:
因此,您可以在代码中的任何位置创建调用此方法的条形项(前提是您在其声明中包含 Headers ) .
附:您不需要使用'v' UIView,因为您可以直接使用按钮创建
UIBarButtonItem
作为自定义视图 .P.P.S.您还需要在代码中使用[正向发布] .
另一个简单的解决方案
拖动标准UIButton
将按钮的样式设置为自定义,并为该按钮设置图像
将其拖到UINavigationBar上
设置选择器
我觉得这很简单 . 它被消化在上面 . “random.png”必须在项目中 . 只需拖放任何图像即可 .
另一种方法是子类UIBarButtonItem . 为什么?这样就可以使用正确的发件人在目标上调用该操作 . 在上面的代码中,操作消息中的sender参数是UIButton实例,而不是UIBarButtonItem实例 . 这很重要,例如,如果您希望从条形按钮项呈现UIPopoverController . 通过继承UIBarButtonItem,您可以添加一个保留原始目标的ivar,允许我们的子类实例使用正确的发送者拦截,修改和转发操作消息 .
那么,CCFBarButtonItem.h:
和CCFBarButtonItem.m
这也可以通过编程方式完成(当然):
首先,创建一个自定义视图 . 此自定义视图可以包含图像,按钮或您想要的任何其他内容 . 自定义视图可以通过编程方式或在IB中进行:
接下来,创建一个UIBarButtonItem并使用自定义视图对其进行初始化 .
现在,只需将自定义UIBarButton添加到leftBarButtonItem:
好吧,这个类别非常好,因为Popovercontroller没有问题:-)
检查这个简单的解决方案 .
这里1x1.png是1像素透明png图像,您可以从下面的链接下载
http://commons.wikimedia.org/wiki/File:1x1.png
另一个解决方案,认为以编程方式创建按钮时更简单: