UIMenuController 未在 UICollectionViewController 子类上显示自定义操作
Posted
技术标签:
【中文标题】UIMenuController 未在 UICollectionViewController 子类上显示自定义操作【英文标题】:UIMenuController not showing custom action on UICollectionViewController subclass 【发布时间】:2017-06-14 22:39:42 【问题描述】:我正在尝试在 UICollectionViewController
子类上使用 UIMenuController
显示自定义操作,即使剪切、复制和粘贴操作按预期显示,但由于某种原因我的自定义操作没有。
我参考了很多网络上的参考资料,但没有一个能成功,这里是代码:
class CollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout
fileprivate var items = [MyClass]()
// MARK: - UICollectionViewDataSource
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return items.count
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellIdentifier", for: indexPath)
/* update cell properties */
return cell
// MARK: - UICollectionViewDelegate
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width: itemSize, height: itemSize)
override func collectionView(_ collectionView: UICollectionView, canPerformAction action: Selector, forItemAt indexPath: IndexPath, withSender sender: Any?) -> Bool
return true
override func collectionView(_ collectionView: UICollectionView, performAction action: Selector, forItemAt indexPath: IndexPath, withSender sender: Any?)
/* Do Something */
override func collectionView(_ collectionView: UICollectionView, shouldShowMenuForItemAt indexPath: IndexPath) -> Bool
return true
public func menuAction(_ sender: UIMenuItem)
/* Action method*/
尝试添加菜单项如下:
let menuItem = UIMenuItem(title: SFLocalization.localizedString("Common-remove"), action: #selector(CollectionViewController.menuAction(_:)))
let menuController = UIMenuController.shared
// menuController.menuItems?.append(menuItem)
menuController.menuItems = [menuItem]
在viewDidLoad
和collectionView(_ collectionView:, shouldShowMenuForItemAt) -> Bool
上
有什么想法吗?
【问题讨论】:
遇到类似问题;你有没有运气找到解决方案? 【参考方案1】:Omer - 查看此链接:http://dev.glide.me/2013/05/custom-item-in-uimenucontroller-of.html
基本上,移动这些方法:
(BOOL)canPerformAction:(SEL)action withSender:(id)sender
(BOOL)canBecomeFirstResponder
... 到 CollectionView 单元子类的作品。然后,您必须将此选择器传递回单元委托。
有了这个,我可以让我的自定义菜单出现!
【讨论】:
以上是关于UIMenuController 未在 UICollectionViewController 子类上显示自定义操作的主要内容,如果未能解决你的问题,请参考以下文章