代码之家  ›  专栏  ›  技术社区  ›  Ali

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

  •  0
  • Ali  · 技术社区  · 2 年前

    我有一个问题,如何在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() {
        
    }
    
    2 回复  |  直到 2 年前
        1
  •  1
  •   MBT    2 年前

    首先在 CustomView .那就叫这个 callback 关闭 goToBack() 方法

    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)
    }
    
        2
  •  0
  •   MartinM    2 年前

    您需要为此创建一个委托。在CustomView中,创建一个属性委托:ButtonDelegate

    protocol ButtonDelegate: class {
        func onTap()
    }
    

    持有CustomView的ViewController必须实现该协议并执行navigationController。已实现的onTap()方法中的popViewController()。

    给代表打电话?。在CustomView goToBack()方法中使用onTap()。