加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift UIMenuController中的坑

发布时间:2020-12-14 06:13:55 所属栏目:百科 来源:网络整理
导读:由于自己喜欢看段子,最近做了一个看段子的APP。主要是因为 网易新闻 和 今日头条 分享段子的姿势恕我不能忍。 完成后的效果 2017-02-21 16_00_55.gif 你只需要点击你想要分享的段子 然后选择QQ或者Wechat,跳转后点击粘贴就好了 不用像网易新闻和今日头条分

由于自己喜欢看段子,最近做了一个看段子的APP。主要是因为网易新闻今日头条分享段子的姿势恕我不能忍。

完成后的效果

2017-02-21 16_00_55.gif

  • 你只需要点击你想要分享的段子
  • 然后选择QQ或者Wechat,跳转后点击粘贴就好了
    不用像网易新闻和今日头条分享一个链接,别人想看还得点进去。当然他们也可以复制,但是那姿势真的不优雅。

在其中用到了UIMenuController这个控件。真的是一个巨坑,上网搜了各种帖子,都不能解决我所遇到的问题。最终这篇帖子帮了我。

1

UIMenuItem(title: "QQ",action: #selector(mqq))看到这个结构,你很自然先到mqq这个方法接收传递的对象是UIMenuItem
但是他传递的是UIMenuController

2

override func tableView(_ tableView: UITableView, didSelectRowAt indexPathIndexPath) {
        tableView.deselectRow(at indexPath animated true)
        if let cell =cellForRow
// self.becomeFirstResponder() 这里先注释
             qqItem  UIMenuItemtitle "QQ" action #selector(mqq)) wechatItem "wechat"#selector(wechat)) menuController UIMenuControllershared
            menuControllermenuItems [qqItem wechatItem]
            menuControllersetTargetRectcellframein cellsuperview!)setMenuVisible(
            selectedText textLabel?.text
        }
    }

这段代码写在UITableViewController中,在不切换tab的情况下,点击cell后UIMenuController是能显示出来的,切换后就显示不出来了。必须加上注释的那句

3

longPresssenderUILongPressGestureRecognizer senderstate ==began selfbecomeFirstResponder() // 这句很重要shared
             item1 "测试1"#selector(test1)) item2 "测试2"#selector(test2))item1 item2 superview
         在上面的基础上,把这段代码放在自定义cell中,UIMenuController又显示不出来了

必须加上这两个方法

// MARK: - 必须实现的两个方法

override var canBecomeFirstResponder: Bool {

return true

}

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if [#selector(test1), #selector(test2)].contains(action) {
            return true
        }
        return false
    }

从方法名你可以看出就是可以执行的方法,会显示出对应的UIMenuItem

如果你这样

canPerformActionSelector withSender senderAny?)->Boolreturntrue}

会显示出系统内置的和你定义的,如果你没有实现对应的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读