我如何覆盖此 class 函数?
How can I override this class function?
我有一个扩展程序 class,我正在其中扩展 UIButton
,如下所示,它工作正常。
extension UIButton {
class func backButtonTarget(_ target: Any, action: Selector) -> UIBarButtonItem {
let backButton = UIButton(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(58), height: CGFloat(15)))
backButton.setTitle("Cancel",for: .normal)
let barBackButtonItem = UIBarButtonItem(customView: backButton)
backButton.addTarget(target, action: action, for: .touchUpInside)
return barBackButtonItem
}
}
但是现在,我需要为某个视图控制器更改它的标题,所以我在考虑它的覆盖,但失败了。如何覆盖它,以便我可以更改它的 title
?
将 title
作为函数的 String
参数,以便您可以调用它并提供自定义标题。
class func backButtonTarget(_ target: Any, action: Selector, title: String) -> UIBarButtonItem {
let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: 58, height: 15))
backButton.setTitle(title, for: .normal)
let barBackButtonItem = UIBarButtonItem(customView: backButton)
backButton.addTarget(target, action: action, for: .touchUpInside)
return barBackButtonItem
}
}
扩展可以not/should不覆盖。
无法覆盖扩展中的功能(如属性或方法),如 Apple Swift 指南中所述。
扩展可以为类型添加新功能,但不能覆盖现有功能。
您可以将条形按钮 Item 子类化为
class CustomBarButtonItem: UIBarButtonItem {
override func awakeFromNib() {
super.awakeFromNib()
customize()
}
func customize() {
frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(58), height: CGFloat(15))
// Add more as per requirement
}
}
我有一个扩展程序 class,我正在其中扩展 UIButton
,如下所示,它工作正常。
extension UIButton {
class func backButtonTarget(_ target: Any, action: Selector) -> UIBarButtonItem {
let backButton = UIButton(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(58), height: CGFloat(15)))
backButton.setTitle("Cancel",for: .normal)
let barBackButtonItem = UIBarButtonItem(customView: backButton)
backButton.addTarget(target, action: action, for: .touchUpInside)
return barBackButtonItem
}
}
但是现在,我需要为某个视图控制器更改它的标题,所以我在考虑它的覆盖,但失败了。如何覆盖它,以便我可以更改它的 title
?
将 title
作为函数的 String
参数,以便您可以调用它并提供自定义标题。
class func backButtonTarget(_ target: Any, action: Selector, title: String) -> UIBarButtonItem {
let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: 58, height: 15))
backButton.setTitle(title, for: .normal)
let barBackButtonItem = UIBarButtonItem(customView: backButton)
backButton.addTarget(target, action: action, for: .touchUpInside)
return barBackButtonItem
}
}
扩展可以not/should不覆盖。
无法覆盖扩展中的功能(如属性或方法),如 Apple Swift 指南中所述。
扩展可以为类型添加新功能,但不能覆盖现有功能。
您可以将条形按钮 Item 子类化为
class CustomBarButtonItem: UIBarButtonItem {
override func awakeFromNib() {
super.awakeFromNib()
customize()
}
func customize() {
frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(58), height: CGFloat(15))
// Add more as per requirement
}
}