ios - 如何在表格视图的 didSelect 上显示弹出框
问题描述
我想在我的 tableview 上实现这种类型的视图确实选择了。这是一个使用swift编程的iOS项目..效果类似于whatsapp ios app...
任何人都可以对如何在表格视图单元格上完成此操作有任何建议吗?
解决方案
此工具提示实际上有一个名称 , 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()
}
}
推荐阅读
- javascript - (节点:31436)UnhandledPromiseRejectionWarning:TypeError:(中间值)不可迭代
- azure - 使用 Azure Rest API 时,资源组未在响应中显示
- c# - 保存用户搜索历史和结果
- android - 关注 ListView 的底部?扑
- javascript - 使用 JavaScript 使用多维数组的一个元素创建一个新数组
- spring - Spring 网关和身份验证路由
- php - 使用逗号分隔的订单 ID 字符串访问 WooCommerce 订阅数据
- time-complexity - P vs NP:如何证明它们不相等?
- java - 有没有办法在 Java 中转换一个不会占用内存空间的对象?
- python - 开放式 AI 健身房中的随机播种