导航栏中的自定义返回按钮(Swift)

4
我想在导航栏中使用自定义图像来替代返回按钮。我正在使用以下代码添加图像,但是“后退”文本仍然显示在按钮中。我还想删除文本,这可行吗?
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)
2个回答

9
尝试下面的代码 :-)
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)
}

1
@AlekseyTimoshchenko,请检查我已经更新了Swift 3的答案。 - Mitul Marsoniya
谢谢,它可以工作了,但是如何将文本设置在图像旁边呢?我尝试使用.setTitle("Cancel",for: .normal),但它不起作用...我尝试增加按钮框架,但也没有成功...我做错了什么? - Sirop4ik
尝试这个:btnLeftMenu.frame = CGRect(x: 0, y: 0, width: 60, height: 44) - Mitul Marsoniya
背景...但我需要图片,图片旁边需要有文本,这正是我所需要的。 - Sirop4ik
Aleksey Timoshchenko不需要显式设置框架,而是可以直接在按钮上调用sizeToFit()方法。 - Sudhir kumar
显示剩余6条评论

6
如果你想在每个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方法,则需要直接在类中添加此方法,并相应设置目标和选择器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接