使用Swift对UINavigationBar进行子类化

时间:2014-12-08 02:08:09

标签: ios swift uinavigationbar

我正在编写一个应用程序,用户可以使用令牌,我希望在UINavigationBar中显示用户当前的令牌数量。我想要的是带有令牌数量的标签,以及导航栏右上角的硬币图像。

我一直在寻找自定义UINavigationBar的方法,并且发现了大量与添加图片以覆盖整个条形图以及更改标题相关的帖子。但是,我找不到一种简单的方法来做我想做的事。

我想我需要继承UINavigationBar并自己添加文本/图片,但是对于 iOS 开发和Swift的新手,我希望有人可以指出我正确的方向

2 个答案:

答案 0 :(得分:5)

您可以创建包含子视图UILabelUIImageView的自定义视图,以显示令牌编号和令牌图像。将其添加到导航控制器的右侧栏按钮项。

看起来像:

enter image description here

下面的代码将创建自定义视图。在这里你可以观察到它是一个局部变量。但是,您可以管理自定义视图的全局变量,或创建一个全新的类并单独管理它以进行实时更新以显示令牌编号。

// Custom to hold token number and image
let tokenView = UIView(frame: CGRect(x:0, y:0, width:100, height:44))
tokenView.backgroundColor = UIColor.yellow

// Label to show token number
let tokenLabel = UILabel(frame: CGRect(x:0, y:0, width:60, height:44))
tokenLabel.text = "1234"
tokenLabel.textAlignment = NSTextAlignment.right

let imageHeight = CGFloat(30)
let marginY = CGFloat((tokenView.frame.size.height / 2) - (imageHeight / 2))

// ImageView to display token image
let tokenImage = UIImageView(image: UIImage(named: "coin"))
tokenImage.frame = CGRect(x:70, y:marginY, width:30, height:30)

tokenView.addSubview(tokenLabel)
tokenView.addSubview(tokenImage)

// Add custom view as a right bar button item
let barButtonItem = UIBarButtonItem(customView: tokenView)
self.navigationItem.rightBarButtonItem = barButtonItem

答案 1 :(得分:0)

要显示当前的令牌数,您只需设置标题即可。在视图控制器中:

navigationItem.title = '\(numberOfCoins) coins"

如果你想做更多花哨的事情,你可以设置自己的标题视图,而不是标准的UILabel:

navigationItem.titleView = UIView(...) // your custom view

要在右上角显示硬币,您需要设置rightBarButtonItem

navigationItem.rightBarButtonItem = UIBarButtonItem(
  image: UIImage(named:"Coin"),
  style: .Plain,
  target:self,
  action:"tappedCoinButton:")