【发布时间】: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