UIBarButtonItem 的 UIButton 扩展
Posted
技术标签:
【中文标题】UIBarButtonItem 的 UIButton 扩展【英文标题】:UIButton Extension For UIBarButtonItem 【发布时间】:2017-04-13 10:53:26 【问题描述】:我正在通过获取 swift 文件来编写扩展程序,并按以下方式编写代码:
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
现在,我尝试通过以下方式在我的视图控制器中声明一个按钮来使用它:
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 左栏项目按钮应该按照我创建的按钮显示,但它也没有显示它既不进入扩展功能,而是通过使用类别完美地处理目标 c 代码,其中 i'我在这里做错/错误?任何帮助都将不胜感激。
谢谢
【问题讨论】:
检查你的backButton
除了一切都很好,你的代码在我身边完美运行
当我推送到视图控制器时,已经创建了一个默认的后退按钮,所以我需要用我自己设计的按钮替换它,如果我在那个类中这样做,那么它是可能的,但我需要每一个可能的推送视图控制器,所以我创建了扩展,但没有得到它。 @Anbu.Karthik
我没有遇到它完美工作的任何问题
@Anbu.Karthik 它是如何完美地工作的,:/ 当我在扩展方法之前添加“类”并做了:self.navigationItem.leftBarButtonItem = UIButton.backButtonTarget(self, action: #selector( self.popCurrentViewController)),然后它开始工作。顺便说一句,感谢您的快速回复。 :)
@Anbu.Karthik 它不会显示返回按钮,因为 backButton 是 nil
所以它不会调用可选的 nil 对象上的方法。
【参考方案1】:
navigationBar
中没有按钮是因为你的backButton
是 nil,目前你已经添加了带有实例方法的扩展,而不是你需要类方法。
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))
【讨论】:
您好先生,我该怎么做? 是的,完美,它现在正在工作,再次感谢先生 :) 我忘了在扩展方法之前添加“类”,它被声明为目标 c 为“+”号。很有帮助。以上是关于UIBarButtonItem 的 UIButton 扩展的主要内容,如果未能解决你的问题,请参考以下文章