由于自己喜欢看段子,最近做了一个看段子的APP。主要是因为网易新闻和今日头条分享段子的姿势恕我不能忍。
完成后的效果2017-02-21 16_00_55.gif
你只需要点击你想要分享的段子 然后选择QQ或者Wechat,跳转后点击粘贴就好了不用像网易新闻和今日头条分享一个链接,别人想看还得点进去。当然他们也可以复制,但是那姿势真的不优雅。 坑
在其中用到了UIMenuController
这个控件。真的是一个巨坑,上网搜了各种帖子,都不能解决我所遇到的问题。最终这篇帖子帮了我。
UIMenuItem(Title: "QQ",action: #selector(mqq))
看到这个结构,你很自然先到mqq这个方法接收传递的对象是UIMenuItem
但是他传递的是UIMenuController
overrIDe func tableVIEw(_ tableVIEw: UItableVIEw, dIDSelectRowAt indexPathIndexPath) { tableVIEw.deselectRow(at indexPath animated @H_404_104@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
是能显示出来的,切换后就显示不出来了。必须加上注释的那句
longPresssenderUILongPressGestureRecognizer senderstate ==began selfbecomeFirstResponder() // 这句很重要shared item1 "测试1"#selector(test1)) item2 "测试2"#selector(test2))item1 item2 supervIEw 在上面的基础上,把这段代码放在自定义cell中,会显示出系统内置的和你定义的,如果你没有实现对应的Selector,会CrashUIMenuController
又显示不出来了必须加上这两个方法
// 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}
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
总结以上是内存溢出为你收集整理的Swift UIMenuController中的坑全部内容,希望文章能够帮你解决Swift UIMenuController中的坑所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)