单击 UITableViewCell 从底部查看半屏详细信息

Half-screen details view from the bottom on click of UITableViewCell

我想为我的 UITableView 实现一些细节视图(使用 Storyboard)。因此,当点击单元格时,并不是隐藏整个 table 视图,而是从底部显示一个新的半屏详细视图。附加屏幕的原型。在屏幕上,当点击单元格(灰色)时,该单元格的详细信息会从底部显示。 感谢您的帮助!

这种方法有很多方法,但我将演示我为这种弹出视图所做的工作。

  1. 创建一个新的 ViewController 并将主视图颜色设置为清除并创建具有任何背景颜色的视图,然后为 UI
  2. 做任何您想做的事情

import UIKit
protocol CancelToastDelegate: class {
    func removeBlurredBackgroundView()
}
class customToastVC: UIViewController {
    weak var delegate: CancelToastDelegate?
    @IBOutlet weak var messageView: UIView!
    @IBOutlet weak var messageLabel: UILabel!
    var toastMessage: String?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.setupMessageView()
        delegate?.removeBlurredBackgroundView()
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0, execute: {
            self.dismissToast()
        })
        // Do any additional setup after loading the view.
    }
  
    override func viewWillAppear(_ animated: Bool) {
        self.toastMessage = UserDefaults.standard.string(forKey: "kToastMessage")
        self.messageLabel.text = self.toastMessage ?? ""
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.dismissToast()
    }
    func dismissToast(){
        dismiss(animated: true, completion: nil)
        
    }
    
    func setupMessageView(){
        self.messageView.layer.cornerRadius = 5
        self.messageView.layer.borderColor = UIColor.appColor.customOrange.cgColor
        self.messageView.layer.borderWidth = 1
    }
}

以上是我自动关闭的弹出视图,但您可以使用自己的方法通过点击关闭按钮关闭

  1. 在助手 class 或 UIViewController 的任何地方创建扩展并实现以下功能

    func showPopup() {
             let vc = self.storyboard?.instantiateViewController(withIdentifier: "customToastVC")
             vc?.modalPresentationStyle = .overFullScreen
             self.present(vc!, animated: true, completion: nil)
         }
    
  2. 在父 tableView 中,您可以在 DidSelect 委托中或任何需要的地方使用扩展,如下所示。

self.showPopup()

如果你想使用模糊视图或其他东西,请使用我使用的协议方法。

希望对您有所帮助。没有时间为你的场景重写代码只是我代码中的一个例子