簡體   English   中英

UIBarButtonItem的UIButton擴展

[英]UIButton Extension For 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
    }


}

現在,我嘗試通過以下方式在視圖控制器中聲明一個按鈕來使用它:

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左欄項目按鈕應該按照我創建的按鈕顯示,但是它既沒有顯示也沒有輸入擴展功能,而是通過使用類別完美地處理了Objective c代碼,其中我做錯了/這里有錯? 任何幫助將是可觀的。

謝謝

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這種方式添加BarButtonItem

self.navigationItem.leftBarButtonItem = UIButton.backButtonTarget(self, action: #selector(self.popCurrentViewController))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM