iOS 长按复制所遇到的坑

1.注册长按手势(我自定义了一个Label,在Label中实现)

  self.userInteractionEnabled = true;
  UILongPressGestureRecognizer * recognizer = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressEvent:)];
 [self addGestureRecognizer:recognizer];

-(void)longPressEvent:(UILongPressGestureRecognizer *)longPress {
    if (longPress.state == UIGestureRecognizerStateBegan) {
        [self becomeFirstResponder];//一定要写
        UIMenuController * menuController = [UIMenuController sharedMenuController];
        [menuController setTargetRect:self.bounds inView:self];
        [menuController setMenuVisible:YES animated:YES];
    }
}

2.设置可为第一响应(别写错了)

- (BOOL)canBecomeFirstResponder{
    return true;
}

3.实现系统相关方法

- (void)copy:(id)sender{
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    [pasteboard setString:self.text];
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    return action == @selector(copy:);
}

系统有对应复制、粘贴、剪切等代理方法,我们只要实现方法就行了,记得在canPerformAction中根据需要添加即可

3.莫名闪退原因(如果你按上面写了但还是会莫名闪退,请看下面)

检查当前界面所属ViewController中有没有你定义为inputView的属性,有请换个名字!!!!!
Over~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,930评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,052评论 8 183
  • 像我,一个人,年轻的时候,总是有些懒惰,不是针对别的,只是说对生活而已。 我们这里好些个同事都是年轻人,我也一样,...
    我是陈姑娘阅读 261评论 0 0
  • 我来不及认真地年轻,待明白过来时,只能选择认真地老去。
    冬季与迷雾阅读 249评论 0 0