我想在导航栏上放置一个图像和标签,所以我决定这样做:
class FixedImageNavigationItem: UINavigationItem {
private let fixedImage : UIImage = UIImage(named: "navlogo")!
private var imagak : UIImageView!
private let imageView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 129, height: 40))
private var labelaki : UILabel!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let tView = imageView
imagak = UIImageView(frame: CGRect(x: 2, y: 3, width: 32, height: 35))
labelaki = UILabel(frame: CGRect(x: 38, y: 10, width: 87, height: 21))
imagak.image = fixedImage
labelaki.text = "Prime Help"
labelaki.textColor = UIColor.white
imageView.addSubview(labelaki)
imageView.addSubview(imagak)
tView.contentMode = .scaleAspectFit
self.titleView = tView
}
}
以上代码在iPhone 5及更高版本上运行良好,但是当我尝试在iphone 4s ios 8上测试时,我收到了这个错误:
致命错误:使用未实现的初始化程序&#init;标题:'上课 ' Insurance.FixedImageNavigationItem'
有什么想法吗?
提前致谢
答案 0 :(得分:1)
该错误与设备类型无关,但在iOS 9中引入了iOS版本init(coder:)方法,因此崩溃了。
但是,初始化程序init(title:)可以在iOS 2.0以上的iOS版本中使用,并且你已经在iOS 8上实现了它,这就是错误所在。
您应该实施init(title:)
而不是init(coder:)
。
答案 1 :(得分:1)
只有在要在Storyboard或Xib中配置时才需要覆盖initWithCoder
。在您的情况下,大多数元素已经声明为常量。当您覆盖initWithCoder
时,您还必须覆盖initWithTitle
,因为initWithTitle
是UINavigationItem
指定的初始值设定项。示例代码会像这样。
class CustomNavItem :UINavigationItem {
private let fixedImage : UIImage = UIImage(named: "navlogo")!
private var imagak : UIImageView!
private let imageView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 129, height: 40))
private var labelaki : UILabel!
override init(title: String) {
super.init(title: title)
self.configure()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
self.configure()
}
func configure() {
let tView = imageView
imagak = UIImageView(frame: CGRect(x: 2, y: 3, width: 32, height: 35))
labelaki = UILabel(frame: CGRect(x: 38, y: 10, width: 87, height: 21))
imagak.image = fixedImage
labelaki.text = title
labelaki.textColor = UIColor.white
imageView.addSubview(labelaki)
imageView.addSubview(imagak)
tView.contentMode = .scaleAspectFit
self.titleView = tView
}
}