swift UiView()内部的自定义匿名闭包导航返回按钮

cwxwcias  于 2023-05-05  发布在  Swift
关注(0)|答案(2)|浏览(230)

我有一个问题,如何在UIView()中实现自定义返回导航按钮的创建。我有一个包含collectionView的主控制器,单击任何单元格都会转到包含tableView的第二个控制器。我在tableView标题中创建了一个单独的自定义视图,在其中添加了标签、图片和按钮。我需要在自定义视图中单击backButton时,它会转到主控制器。如何实施?我制作的应用程序只编程-(没有故事板)

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() {
    
}
sg2wtvxw

sg2wtvxw1#

首先在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?()
    }
}

在初始化CustomViewUIViewController中,给予闭包的动作。

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

xqnpmsa82#

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

protocol ButtonDelegate: class {
    func onTap()
}

保存CustomView的ViewController必须实现该协议,并在实现的onTap()方法中执行navigationController.popViewController()。
呼叫委派?.onTap()在CustomView goToBack()方法中。

相关问题