如何在 Swift 中替换 Material 中的后退按钮

Posted

技术标签:

【中文标题】如何在 Swift 中替换 Material 中的后退按钮【英文标题】:How to replace back button in Material in Swift 【发布时间】:2017-07-04 02:57:25 【问题描述】:

我想更改后退按钮的行为,并将 Material 的后退按钮替换为新的条形按钮,如下所示:

let backButton: UIButton = 
    let btn = UIButton()
    btn.setImage(UIImage(named: "prev"), for: .normal)
    btn.frame = CGRect(x: 0, y: 0, width: 33/2, height: 27/2)

    return btn
()

viewDidLoad函数中:

override func viewDidLoad() 
    super.viewDidLoad()

    backButton.action =  [weak self] in self?.showAlert() 
    let barButton = UIBarButtonItem(customView: backButton)
    navigationItem.backButton.isHidden = true
    navigationItem.leftBarButtonItems = [barButton]

但我无法点击新的后退按钮,因为它已被 UINavigationBarBackIndicatorView 覆盖。

如何用 Material 替换后退按钮。我想保留 Material 库,因为在项目的其他功能中我需要 Material

提前感谢您的帮助。

【问题讨论】:

您的问题解决了吗? 已修复:Material。非常感谢您对我的问题的帮助。 如果您觉得我的回答有帮助,请将其标记为有用/已接受 【参考方案1】:

在您的 viewDidLoad() 方法中执行此操作:

    self.navigationItem.backBarButtonItem.hidden = YES
    let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(YourViewController.back(sender:)))
    self.navigationItem.leftBarButtonItem = newBackButton
    self.navigationItem.leftBarButtonItem?.image = UIImage(named : "prev")
    self.navigationItem.leftBarButtonItem?.accessibilityFrame = CGRect(x: 0, y: 0, width: 33/2, height: 27/2)

然后在您的视图控制器中定义一个名为back 的函数,该函数将为您的新后退按钮执行所需的操作

func back(sender: UIBarButtonItem) 
        // Perform your custom action
    

注意无需单独定义按钮变量

**如果self.navigationItem.backBarButtonItem.hidden = YES 不起作用,则将其替换为self.navigationItem.backBarButtonItem = nil; **

【讨论】:

感谢您的回答,但 Material 的后退按钮并未隐藏。 或者你试试这个:navigationItem.hidesBackButton = true,首先使用我显示的代码,然后根据需要进行更改 我在development 分支中为你做了一个修复。如果你在 github 上提出这个问题,我会在我将它发布到 master 分支后更新你。应该不会超过几天。【参考方案2】:

将 backButton.isHidden 与包含新自定义 IconButton 的 leftViews 一起使用对我有用,我使用的是 Material 2.17.0。

func setNavigation() 
        let backButton = IconButton(image: Icon.cm.arrowBack)
        backButton.addTarget(self, action: #selector(onBackTapped), for: .touchUpInside)
        navigationItem.leftViews = [backButton]
        navigationItem.backButton.isHidden = true
    

【讨论】:

以上是关于如何在 Swift 中替换 Material 中的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中使用Google Material MDCOutlinedTextField从文本字段中删除占位符文本?

python 对于当前Blender场景中的所有对象,搜索名为MATERIAL.001,MATERIAL.002 ...的材质,并替换为母版

Material-UI:如何在 react admin <Login /> 中替换 backgroundImage css?

mysql中如何进行模糊替换

什么可以替换查询中的 IN 子句以使其更快?

如何替换 react-material-ui datepicker 的导航图标?