导航栏中的 Swift 自定义后退按钮

Posted

技术标签:

【中文标题】导航栏中的 Swift 自定义后退按钮【英文标题】:Swift custom back button in navigation bar 【发布时间】:2016-05-10 13:40:49 【问题描述】:

我正在尝试为导航栏中的后退按钮使用自定义图像。我正在使用下面的代码,它添加了图像,但也在按钮中保留了文本“Back”。我还想删除文本。我可以这样做吗?

self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "icon-back")
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "icon-back")
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)

【问题讨论】:

【参考方案1】:

试试下面的代码:-)

func SetBackBarButtonCustom()

    //Back buttion
    let btnLeftMenu: UIButton = UIButton()
    btnLeftMenu.setImage(UIImage(named: "back_arrow"), for: UIControlState())
    btnLeftMenu.addTarget(self, action: #selector(UIViewController.onClcikBack), for: UIControlEvents.touchUpInside)
    btnLeftMenu.frame = CGRect(x: 0, y: 0, width: 33/2, height: 27/2)
    let barButton = UIBarButtonItem(customView: btnLeftMenu)
    self.navigationItem.leftBarButtonItem = barButton


func onClcikBack()

    _ = self.navigationController?.popViewController(animated: true)

【讨论】:

@AlekseyTimoshchenko 请检查我有 swift 3 的更新 Ans。 谢谢它的工作,但如何在图像旁边设置文字?我尝试了.setTitle("Cancel",for: .normal),但它不起作用...我尝试增加按钮框架,但也没有成功...我做错了什么? 您是否尝试同时设置图像和文字? 当然,但它只显示图像......比我尝试删除图像并只留下文本而不是文本我得到三个点 ... ,而不是我尝试增加按钮框架两次,但无论如何... 。您是否尝试为自己设置文本? 试试这个:- btnLeftMenu.frame = CGRect(x: 0, y: 0, width: 60, height: 44)【参考方案2】:

如果你想在每个 UIViewController 中添加返回按钮,那么你可以在 UIViewController 扩展中添加代码,否则你可以直接使用 addBackButton(),如下所示。

extension UIViewController 

    func addBackButton() 
        let btnLeftMenu: UIButton = UIButton()
        let image = UIImage(named: "backButtonImage");
        btnLeftMenu.setImage(image, for: .normal)
        btnLeftMenu.setTitle("Back".localized, for: .normal);
        btnLeftMenu.sizeToFit()
        btnLeftMenu.addTarget(self, action: #selector (backButtonClick(sender:)), for: .touchUpInside)
        let barButton = UIBarButtonItem(customView: btnLeftMenu)
        self.navigationItem.leftBarButtonItem = barButton
    

    func backButtonClick(sender : UIButton) 
        self.navigationController?.popViewController(animated: true);
    

确保您应该在您的应用程序包中添加以下文件“backButtonImage.png”。

像这样在自定义 UIViewController 类的 viewDidLoad 方法中调用此方法 self.addBackButton()

override func viewDidLoad() 
         super.viewDidLoad()
         self.addBackButton()
 

注意:如果你没有在扩展中添加 addBackButton 方法,那么你需要直接在类中添加这个方法并相应地设置目标和选择器。

【讨论】:

以上是关于导航栏中的 Swift 自定义后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

IOS - 垂直对齐导航栏中的后退按钮

导航栏控制器中的自定义后退按钮

导航时隐藏自定义中间按钮 swift 4

带有自定义后退按钮字体的错误大标题动画

在 Swift 中使用 hidesBackButton 隐藏导航栏中的后退按钮

如何更改菜单栏中的 Xamarin 后退按钮?