由于自己喜歡看段子,最近做了一個看段子的APP。主要是因為網(wǎng)易新聞和今日頭條分享段子的姿勢恕我不能忍。
完成后的效果

2017-02-21 16_00_55.gif
- 你只需要點擊你想要分享的段子
- 然后選擇QQ或者Wechat,跳轉(zhuǎn)后點擊粘貼就好了
不用像網(wǎng)易新聞和今日頭條分享一個鏈接,別人想看還得點進去。當然他們也可以復(fù)制,但是那姿勢真的不優(yōu)雅。
坑
在其中用到了UIMenuController這個控件。真的是一個巨坑,上網(wǎng)搜了各種帖子,都不能解決我所遇到的問題。最終這篇帖子幫了我。
1
UIMenuItem(title: "QQ", action: #selector(mqq))看到這個結(jié)構(gòu),你很自然先到mqq這個方法接收傳遞的對象是UIMenuItem
但是他傳遞的是UIMenuController
2
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if let cell = tableView.cellForRow(at: indexPath) {
// self.becomeFirstResponder() 這里先注釋
let qqItem = UIMenuItem(title: "QQ", action: #selector(mqq))
let wechatItem = UIMenuItem(title: "wechat", action: #selector(wechat))
let menuController = UIMenuController.shared
menuController.menuItems = [qqItem, wechatItem]
menuController.setTargetRect(cell.frame, in: cell.superview!)
menuController.setMenuVisible(true, animated: true)
selectedText = cell.textLabel?.text
}
}
這段代碼寫在UITableViewController中,在不切換tab的情況下,點擊cell后UIMenuController是能顯示出來的,切換后就顯示不出來了。必須加上注釋的那句
3
func longPress(sender: UILongPressGestureRecognizer) {
if sender.state == .began {
self.becomeFirstResponder() // 這句很重要
let menuController = UIMenuController.shared
let item1 = UIMenuItem(title: "測試1", action: #selector(test1))
let item2 = UIMenuItem(title: "測試2", action: #selector(test2))
menuController.menuItems = [item1, item2]
menuController.setTargetRect(frame, in: superview!)
menuController.setMenuVisible(true, animated: true)
}
}
在上面的基礎(chǔ)上,把這段代碼放在自定義cell中,UIMenuController又顯示不出來了
必須加上
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if [#selector(test1), #selector(test2)].contains(action) {
return true
}
return false
}
從方法名你可以看出就是可以執(zhí)行的方法,會顯示出對應(yīng)的UIMenuItem
如果你這樣
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return true
}
會顯示出系統(tǒng)內(nèi)置的和你定義的,如果你沒有實現(xiàn)對應(yīng)的Selector,會Crash

Screen Shot 2017-02-22 at 下午2.26.14.png

Screen Shot 2017-02-22 at 下午2.26.27.png

Screen Shot 2017-02-22 at 下午2.26.39.png

Screen Shot 2017-02-22 at 下午2.31.37.png
本文Demo