iOS关于自定义rightBarButtonItem

在常见iOS开发中,我们常遇到这样的需求,如下:

我们需要自定义导航栏右侧按钮,常见的自定义包装按钮如下:

//设置rightItem;

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

btn.frame = CGRectMake(0, 0, 40, 30);

btn.selected = NO;

[btn setTitle:@"管理" forState:UIControlStateNormal];

[btn setTitle:@"取消" forState:UIControlStateSelected];

[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[btn addTarget:self action:@selector(tap:) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithCustomView:btn];

[self.navigationItem setRightBarButtonItem:rightItem];

但通过这个方法,我们往往是不能调整自定义出来的UIview距离屏幕边界的方法,对于一些比价坑*的产品经理来说,这远远不能达不到他们那颗装*的心,这个时候我们只能通过如下方法来调整整个个customView距离右边边界的值:

//设置rightBarBtnItem样式:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

btn.frame = CGRectMake(0, 0, 100, 30);

[btn setImage:[UIImage imageNamed:@"rightUp"] forState:UIControlStateNormal];

[btn setTitle:@"推荐奖励" forState:UIControlStateNormal];

[btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];

btn.titleLabel.font = [UIFont systemFontOfSize: 15.0];

btn.titleLabel.textAlignment = NSTextAlignmentRight;

[btn setTitleEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)];

UIBarButtonItem *rewardItem = [[UIBarButtonItem alloc]initWithCustomView:btn];

UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];

spaceItem.width = -15;

[btn addTarget:self action:@selector(pushToReward) forControlEvents:UIControlEventTouchUpInside];

self.navigationItem.rightBarButtonItems = @[spaceItem,rewardItem];

注意:这里着重强调的是给rightBarButtonItems弄成了一个数组,给它增加了一个spaceItem元素,用来控制customView距离右边的间距,本身rightBarButtonItem中包装的button距离它父控件,也就是rightBarButtonItem的值是5,当我们把width设置为-15后,相当于把整个rightBarButtonItem向右移动了10,对于特殊需求,可自行去调整.

时间: 2024-10-06 12:05:46

iOS关于自定义rightBarButtonItem的相关文章

[IOS]swift自定义uicollectionviewcell

刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollectionviewcontroller,而是添加的uicollectionview到我的storyboard, 然后再新建一个swift的文件,让这个swift继承uicollectionviewcell import Foundation class SVGCell :UICollectionView

iOS多线程自定义operation加载图片 不重复下载图片

摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用:   2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验   2:自定义operation继承自NSOperation,在子线程中下载图片: 3:保证图片只下载一次,还有保证下载任务不重复 ------------------------------------------------------------------------------------ 实现原理:1:图片缓存:用

IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)

为尊重文章原作者,转载务必注明原文地址:http://www.cnblogs.com/wt616/p/3784717.html 先看效果图: 在自定义导航栏背景时,可能会遇到以下一些问题: 1.当设置导航栏背景后,状态栏的颜色也会跟着一起改变掉,这可能不是你说希望看到的 2.IOS7以上的版本和低版本显示出来的导航栏高度位置有差别,这个差别就是状态栏的高度20,为了兼容低版本,必须统一 解决思路: 1.不正常的是状态栏的背景也一起变了,而状态栏的文字是可以通过其他API去设置的:如 [[UIAp

iOS 7 自定义Back按钮 与 Pop interactive gesture

1.自定义Back按钮 iOS中很多时候我们都会自定义返回按钮,也是一件easy的事,类似如下: // 返回按钮 1 - (void)showNavBackButton 2 { 3 UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 4 [backButton addTarget:self action:@selector(backButtonAction:) 5 forControlEvents:UICont

ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色

很多app中可以看到不同与导航栏的状态栏的颜色,他妈的真绕嘴. 一.更改状态栏颜色 (StatusBar) 就是比如导航栏是红色的状态栏是绿色的. 要实现这样的效果其实很简单,就是添加一个背景view. 简单的实现过程如下: 1 // 设置导航颜色 可用 2 [self.navigationController.navigationBar setBarTintColor:[UIColor redColor]]; 3 //创建一个高20的假状态栏 4 UIView *statusBarView =

IOS开发自定义CheckBox控件

IOS本身没有系统的CheckBox组件,但是实际开发中会经常用到,所以专门写了一个CheckBox控件,直接上代码 效果图: UICheckBoxButton.h文件如下: #import #import "Common.h" @interface UICheckBoxButton : UIControl { UILabel *label; UIImageView *icon; BOOL checked; id delegate; } @property (retain, nonat

【转】IOS版本自定义字体步骤

本文转载自:http://quick.cocoachina.com/wiki/doku.php?id=ios%E7%89%88%E6%9C%AC%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%97%E4%BD%93%E6%AD%A5%E9%AA%A4 比如字体文件名叫abc.ttf, 用mac字体工具查到字体的名称: PostScript名称 FZYHJW--GB1-0 全名 方正艺黑简体 这个PostScript 名称就是我们的字体名称,

iOS开发-自定义后台显示图片(iOS7-Background Fetch的应用)

之前在用电池医生的时候, 发现它有这样一个功能:当应用进入后台的时候, 会显示另外一张图片覆盖App Switcher显示的界面. 效果如下: 变成----> 而这样的一个功能, 对于保护用户隐私还是挺有用的. 这就涉及到了Background Fetch的使用.当然, Background Fetch有更多,更有用的功能, 详见-->iOS 7学习:多任务处理之Background Fetch 下面就介绍下后台图片切换的实现. 1.程序配置后台模式 操作如下: 2. AppDelegate.

iOS开发- 自定义遮罩视图(引导, 功能说明)源码+解析

iOS开发- 自定义遮罩视图(引导, 功能说明)源码+解析 我们平时使用App的时候, 经常在第一次使用的时候, 会有类似"新手教程"之类的东西, 来引导我们应该如何使用这个App. 但是这个"新手教程"不同于常规的引导页(引导页指第一次打开App时候, 弹出的那种介绍视图. 他是静态的, 不需要与用户交互, 可以直接一页页翻, 或者直接跳过.)所谓的"新手教程", 就是按照App的提示, 一步步跟着完成. 那这个"新手教程"