03.自定义UIBarButtonIetm,设置高亮

本文介绍如何在iOS应用中自定义UIBarButtonItem,实现类似UIButton的高亮效果,并通过调整titleEdgeInsets确保导航栏左侧和右侧按钮的位置准确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用新浪微博APP时,我们发现新浪微博iOS客户端导航栏item点击会有高亮效果,图片和字体颜色是可以像UIButton那样变化的。明显这不是系统自带的效果,需要我们自定义UIBarButtonItem。简要的贴一下代码:

/**
 *  只有title
 */
+ (UIBarButtonItem *)itemWithLeftTitle:(NSString *)title target:(id)target action:(SEL)action color:(UIColor *)color highlightedColor:(UIColor *)highlightedColor
{
    UIButton *btn = [self buttonWithTitle:title target:target action:action color:color highlightedColor:highlightedColor image:nil highlightedImage:nil];
    btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    btn.titleEdgeInsets = UIEdgeInsetsMake(0, -8, 0, 0);
    return [[UIBarButtonItem alloc] initWithCustomView:btn];
}

+ (UIBarButtonItem *)itemWithRightTitle:(NSString *)title target:(id)target action:(SEL)action color:(UIColor *)color highlightedColor:(UIColor *)highlightedColor
{
    UIButton *btn = [self buttonWithTitle:title target:target action:action color:color highlightedColor:highlightedColor image:nil highlightedImage:nil];
    btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
    btn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -8);
    return [[UIBarButtonItem alloc] initWithCustomView:btn];
}


上面的代码可以我们可以写在UIBarButtonItem的分类里边,便于调用。

设置title为什么要写两个方法呢,原因是leftBarButtonItem和rightBarButtonItem显示的位置是不同的。如果不设置titleEdgeInsets,那么显示的位置和原生UIBarButtonItem会有区别。leftBarButtonItem设置它的titleEdgeInsets向左偏移8个像素点。rightBarButtonItem设置它的titleEdgeInsets向右偏移8个像素点。这样和自带的BarButtonItem位置基本相同。

如下图所示:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值