的UIButton扩展为的UIBarButtonItem
我通过采取迅速的文件中按以下方式编写的扩展,做代码:的UIButton扩展为的UIBarButtonItem
import Foundation
import UIKit
extension UIButton{
func backButtonTarget(_ target: Any, action: Selector) -> UIBarButtonItem {
let backButton = UIButton(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(12), height: CGFloat(20)))
backButton.setBackgroundImage(UIImage(named: "back.png"), for: .normal)
let barBackButtonItem = UIBarButtonItem(customView: backButton)
backButton.addTarget(target, action: action, for: .touchUpInside)
return barBackButtonItem
}
}
现在,我试图在我的ViewController声明一个按钮,我需要的是用它通过以下方式:
var backButton: UIButton! = nil
,并在我的viewDidLoad
我声明了下面的代码:
self.navigationItem.leftBarButtonItem = backButton?.backButtonTarget(self, action: #selector(self.popCurrentViewController))
和popCurrentViewController
func popCurrentViewController() -> Void {
_ = self.navigationController?.popViewController(animated: true)
}
在这里,通过上面的代码中声明,UINavigationBar的leftbar项目按钮应显示按我创建的按钮,但它没有显示无论它进入扩展功能要么,但对目标C工作完美代码使用类别,我在这里做错误/错误?任何帮助将是可观的。
感谢
有一个在navigationBar
没有按钮是因为你的backButton
是零,目前已添加的扩展与实例方法,而不是你需要的类方法。
extension UIButton {
class func backButtonTarget(_ target: Any, action: Selector) -> UIBarButtonItem {
let backButton = UIButton(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(12), height: CGFloat(20)))
backButton.setBackgroundImage(UIImage(named: "back.png"), for: .normal)
let barBackButtonItem = UIBarButtonItem(customView: backButton)
backButton.addTarget(target, action: action, for: .touchUpInside)
return barBackButtonItem
}
}
现在加上BarButtonItem
这样。
self.navigationItem.leftBarButtonItem = UIButton.backButtonTarget(self, action: #selector(self.popCurrentViewController))
你好,先生,我该怎么做? –
@AbhishekMitra检查已编辑的答案 –
是的完美,它现在工作,再次感谢Sir :)我忘了在扩展方法之前添加“class”,并且将它声明为“+”号。非常有帮助。 –
检查一次你的'backButton'除了一切都很好,在你的代码完全在我的身边 –
当我推到一个视图控制器,默认返回按钮已经被创建的,所以我需要更换我的自己设计的按钮,如果我在那个类中做,那么它可能是可能的,但我需要在每个可能的推视图控制器,所以我已经创建了扩展,但没有得到。 @ Anbu.Karthik –
我没有面对任何问题其作品完美 –