ios - 如何在自定义的 UIBarButtonItem 上放置角标(Badge)

标签 ios objective-c xcode uibarbuttonitem navigationbar

我有一个带有两个按钮的导航栏,一个是后退按钮,另一个是聊天符号。

我这样写这段代码:

UIBarButtonItem *_btn=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"back.png"]
                                                      style:UIBarButtonItemStylePlain
                                                     target:self
                                                     action:@selector(goBackToPreviousView)];

self.navigationItem.leftBarButtonItem=_btn;
self.navigationItem.leftBarButtonItem.tintColor = [UIColor blackColor];


UIBarButtonItem *_btn2=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"chat.png"]
                                                      style:UIBarButtonItemStylePlain
                                                     target:self
                                                     action:@selector(startChat)];

self.navigationItem.rightBarButtonItem=_btn2;
self.navigationItem.rightBarButtonItem.tintColor = [Utility colorWithHexValue:CyanBlue];

我遇到的问题是,每当聊天中有一些我没有看到的新消息时,聊天按钮上应该有某种角标(Badge)或自定义标签,以指示您有多少条新消息有。

我该怎么做?

最佳答案

对于 Swift 3.0:

结果:

enter image description here

代码:

override func viewDidLoad() {
  super.viewDidLoad()

  // badge label
  let label = UILabel(frame: CGRect(x: 10, y: -10, width: 20, height: 20))
  label.layer.borderColor = UIColor.clear.cgColor
  label.layer.borderWidth = 2
  label.layer.cornerRadius = label.bounds.size.height / 2
  label.textAlignment = .center
  label.layer.masksToBounds = true
  label.font = UIFont(name: "SanFranciscoText-Light", size: 13)
  label.textColor = .white
  label.backgroundColor = .red
  label.text = "80"

  // button
  let rightButton = UIButton(frame: CGRect(x: 0, y: 0, width: 18, height: 16))
  rightButton.setBackgroundImage(UIImage(named: "inbox"), for: .normal)
  rightButton.addTarget(self, action: #selector(rightButtonTouched), for: .touchUpInside)
  rightButton.addSubview(label)

  // Bar button item
  let rightBarButtomItem = UIBarButtonItem(customView: rightButton)

  navigationItem.rightBarButtonItem = rightBarButtomItem
}

func rightButtonTouched() {
  print("right button touched")
}

关于ios - 如何在自定义的 UIBarButtonItem 上放置角标(Badge),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180946/

相关文章:

xcode - NSMutableArray 与核心数据一起存储 = WORKS,但在更改数组后不起作用

objective-c - 音频播放的准确(音乐级)计时

objective-c - 读/写文件头

ios - 根据移动设备的高度调整图像大小

ios - 如何以不同的尺寸显示 2 个不同的原型(prototype)单元

ios - 应用程序崩溃,但没有设备日志

iphone - 跨 View Controller 传输图像

objective-c - ZXING是否与自动引用计数兼容

ios - 如何使用 Facebook iOS SDK 管理生产和开发凭证

ios - CoreData 源和目标属性类型不兼容