UiView() 内的自定义匿名关闭导航后退按钮

Custom anonymous closure navigation back button inside of UiView()

我有一个问题,如何在 UIView() 中实现自定义后退导航按钮的创建。我有一个包含 collectionView 的主控制器,单击任何单元格都会转到包含 tableView 的第二个控制器。我在 tableView headers 中创建了一个单独的自定义视图,我在其中添加了标签、图片和按钮。我需要在自定义视图中单击后退按钮时,它将转到主控制器。如何实施?我仅以编程方式制作应用程序 -(无情节提要)

CustomView.swift

lazy var backButton: UIButton = {
    let button = UIButton(type: .system)
    let image = UIImage(systemName: "chevron.left")
    button.setImage(image, for: UIControl.State())
    button.tintColor = .white
    button.isHidden = true
    button.addTarget(self, action: #selector(goToBack), for: .touchUpInside)
    button.translatesAutoresizingMaskIntoConstraints = false
    return button
}()

@objc func goToBack() {
    
}

您需要为此创建一个委托。在你的 CustomView 中创建一个 属性 weak var delegate: ButtonDelegate

protocol ButtonDelegate: class {
    func onTap()
}

并且您持有 CustomView 的 ViewController 确实实现了该协议并在实现的 onTap() 方法中执行了 navigationController.popViewController()。

在您的 CustomView goToBack() 方法中调用 delegate?.onTap()。

首先在CustomView中添加一个回调函数。然后从 goToBack() 方法调用这个 callback 闭包。

class CustomView: UIView {
    
    var backButtonTapped: (() -> Void)?
    
    lazy var backButton: UIButton = {
        let button = UIButton(type: .system)
        let image = UIImage(systemName: "chevron.left")
        button.setImage(image, for: UIControl.State())
        button.tintColor = .white
        button.isHidden = true
        button.addTarget(self, action: #selector(goToBack), for: .touchUpInside)
        button.translatesAutoresizingMaskIntoConstraints = false
        return button
    }()

    @objc func goToBack() {
        backButtonTapped?()
    }
}

UIViewController 中初始化这个 CustomView,给出闭包的动作。

let view = CustomView()
view.backButtonTapped = { [weak self] in
    self?.navigationController?.popViewController(animated: true)
}