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 扩展的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 有颜色?

新浪微博客户端-封装UIBarButtonItem

在 KeyboardDidShow 上切换 UIBarButtonItem

UIBarButtonItem 太宽 [重复]

如何获取 UIBarButtonItem 的嵌入按钮

为啥 UIBarButtonItem 默认是禁用的?