【发布时间】:2019-03-04 23:07:49
【问题描述】:
当点击单元格中的图像时,我希望获得UIMenuController。需要明确的是,这不是在点击单元格时,而是在点击单元格内的图像时。图像上的点击手势正常触发并运行该功能,但菜单从未显示。
自定义单元格:
class VideoHomeCell: UITableViewCell {
var thumbImage:UIImage! {
didSet {
createCell()
}
}
private lazy var thumbImageView:UIImageView = {
let view = UIImageView(image: self.thumbImage)
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
view.isUserInteractionEnabled = true
view.translatesAutoresizingMaskIntoConstraints = false
let gesture = UITapGestureRecognizer(target: self, action: #selector(imageTapped))
view.addGestureRecognizer(gesture)
return view
}()
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func createCell() {
self.addSubview(thumbImageView)
thumbImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
thumbImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
thumbImageView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
thumbImageView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
}
@objc func imageTapped(recognizer: UIGestureRecognizer) {
let menuController = UIMenuController.shared
let trimItem = UIMenuItem(title: "Trim", action: #selector(menuSelected))
menuController.menuItems = [trimItem]
menuController.setTargetRect(self.thumbImageView.frame, in: self.superview!)
menuController.setMenuVisible(true, animated: true)
}
@objc func menuSelected() {
print("Menu Selection!")
}
}
表格视图:
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.videoModelArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! VideoHomeCell
cell.thumbImage = self.videoModelArray[indexPath.row].originalThumbnail
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100.0
}
我在setTargetRect 中尝试了不同的值来包含手势的视图和self.frame。我也尝试过自我渲染。此外,我手动设置了CGRect。我所做的一切都不允许显示菜单。
【问题讨论】:
-
在显示菜单之前尝试确保单元格是第一响应者。
-
是的,我之前尝试将
becomeFirstResponder作为imageTapped函数中的第一条语句。它没有帮助。 -
@C6Silver 尝试将
override var canBecomeFirstResponder: Bool { return true }添加到您的 tableview 控制器 -
@LeoDabus - 不幸的是没有快乐。与单元格中的
becomeFirstResponder()一起添加到 TVC,但仍然没有菜单显示。 -
为了傻笑,我将方法添加到我在表控制器中的 UIBarButton 中。它在那里工作。显然不是我要找的,但至少我知道函数应该是正确的。
标签: swift uitableview uimenucontroller