首页 > 解决方案 > 如何在表格视图的 didSelect 上显示弹出框

问题描述

在此处输入图像描述

我想在我的 tableview 上实现这种类型的视图确实选择了。这是一个使用swift编程的iOS项目..效果类似于whatsapp ios app...

任何人都可以对如何在表格视图单元格上完成此操作有任何建议吗?

标签: iosswiftxcodeswift3

解决方案


此工具提示实际上有一个名称 , UIMenuController,并且可以在您自己的应用程序中自定义和使用:

class ResponsiveView: UIView {
    override var canBecomeFirstResponder: Bool {
        return true
    }
}

class ViewController: UIViewController {

    var responsiveView: ResponsiveView!

    override func viewDidLoad() {
        super.viewDidLoad()

        responsiveView = ResponsiveView()

        // Add our responsive view to a super view
        responsiveView.frame = CGRect(x: 0, y: 0, width: 200, height: 50)
        responsiveView.center = self.view.center
        responsiveView.backgroundColor = UIColor(red: 124.0/255.0, green: 112.0/255.0, blue: 255.0/255.0, alpha: 1.0)
        responsiveView.layer.cornerRadius = 4;
        responsiveView.layer.masksToBounds = true
        self.view.addSubview(responsiveView)

        // Add a long press gesture recognizer to our responsive view
        responsiveView.isUserInteractionEnabled = true
        let longPressGR = UILongPressGestureRecognizer(target: self, action: #selector(longPressHandler))
        longPressGR.minimumPressDuration = 0.3 // how long before menu pops up
        responsiveView.addGestureRecognizer(longPressGR)
    }

    @objc func longPressHandler(sender: UILongPressGestureRecognizer) {
        guard sender.state == .began,
            let senderView = sender.view,
            let superView = sender.view?.superview
            else { return }

        // Make responsiveView the window's first responder
        senderView.becomeFirstResponder()

        // Set up the shared UIMenuController
        let saveMenuItem = UIMenuItem(title: "Save", action: #selector(saveTapped))
        let deleteMenuItem = UIMenuItem(title: "Delete", action: #selector(deleteTapped))
        UIMenuController.shared.menuItems = [saveMenuItem, deleteMenuItem]

        // Tell the menu controller the first responder's frame and its super view
        UIMenuController.shared.setTargetRect(senderView.frame, in: superView)

        // Animate the menu onto view
        UIMenuController.shared.setMenuVisible(true, animated: true)
    }

    @objc func saveTapped() {
        print("save tapped")
        // ...
        // This would be a good place to optionally resign
        // responsiveView's first responder status if you need to
        responsiveView.resignFirstResponder()
    }

    @objc func deleteTapped() {
        print("delete tapped")
        // ...
        responsiveView.resignFirstResponder()
    }
}

推荐阅读