最近做一个需求,要在系统导航栏右上角按钮加上一个小红点,以前博主习惯使用自定义导航栏,所以并不怎么和系统的东西打交道,那怎么办?求助度娘呗,查了一会,都是自定义按钮,也没什么比较快捷的方法,于是就自己去看系统UIBarButtonItem,这一看不打紧,还真让博主找到了办法。
有这么一个属性:
@property(nullable, nonatomic,strong) __kindof UIView *customView; // default is nil
默认为nil,当创建了UIBarButtonItem之后就存在了,所以我们是不是可以直接把红点加在这个customView上面?
于是进行了如下尝试;
UIBarButtonItem *saveItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"xxxxxx" target:self action:@selector(xxxxxxAction)]; self.navigationItem.rightBarButtonItem = saveItem; UIView *redPoint = [[UIView alloc] initWithFrame:CGRectMake:(x, y, width, height)]; redPoint.backgroundColor = [UIColor red]; redPoint.layer.cornerRadius = 3; redPoint.clipsToBounds = YES; [saveItem.customView addSubview:redPoint];
哈,竟然成功了,如果需要删除这个点也很简单,直接:
//redPoint写成全局即可 [redPoint removeFromSuperview];
意外之喜,免了自定义的麻烦,而且可控度还非常高。
还有一种比较好的用法就是扩展UIBarButtonItem这个类,直接加上红点,增加布尔值直接控制,是不是很简单呢?