【问题标题】:UIButton Extension For UIBarButtonItemUIBarButtonItem 的 UIButton 扩展
【发布时间】: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 对象上的方法。

标签: ios swift3 uibutton uinavigationitem swift-extensions


【解决方案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 为“+”号。很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
相关资源
最近更新 更多