2017-04-13 42 views
0

我通过采取迅速的文件中按以下方式编写的扩展,做代码:的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工作完美代码使用类别,我在这里做错误/错误?任何帮助将是可观的。

感谢

+0

检查一次你的'backButton'除了一切都很好,在你的代码完全在我的身边 –

+0

当我推到一个视图控制器,默认返回按钮已经被创建的,所以我需要更换我的自己设计的按钮,如果我在那个类中做,那么它可能是可能的,但我需要在每个可能的推视图控制器,所以我已经创建了扩展,但没有得到。 @ Anbu.Karthik –

+0

我没有面对任何问题其作品完美 –

回答

2

有一个在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)) 
+0

你好,先生,我该怎么做? –

+0

@AbhishekMitra检查已编辑的答案 –

+0

是的完美,它现在工作,再次感谢Sir :)我忘了在扩展方法之前添加“class”,并且将它声明为“+”号。非常有帮助。 –