有的时候我们想要实现复制或剪切或粘贴功能。具体方式有两种,一种就是自己画个框实现界面效果,然后调用系统API把内容放到剪切板上;另一种就是界面也用系统的。本文说的是第二种方式,以为系统的做的已经非常好了。
1.在点击事件中,获得第一响应者,初始化菜单界面
[self becomeFirstResponder];
[UIMenuController sharedMenuController].arrowDirection = UIMenuControllerArrowDown;
[[UIMenuController sharedMenuController] setTargetRect:self.frame inView:[self superview]];
[[UIMenuController sharedMenuController] setMenuVisible:YES animated: YES];
2.实现以下方法:
- (BOOL)canBecomeFirstResponder
{
return YES;
}
在这里添加想要实现的功能
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(copy:)) {//复制
return YES;
}
if (action == @selector(paste:)) {//粘贴
return YES;
}
if (action == @selector(cut:)) {//剪切
return YES;
}
return NO;
}
实现相应的方法
- (void)copy:(id)sender
{
//复制内容到剪切板
UIPasteboard *generalPasteBoard = [UIPasteboard generalPasteboard];
[generalPasteBoard setString:self.textField.text];
}
- (void)paste:(id)sender
{
}
- (void)cut:(id)sender
{
}
3.这些文字系统会自动多语言适配,如果你想要自定义文字,可以通过在 UIMenuController上添加 UIMenuItem 实现。 就是这么简单,其实如果你想要在一个框上添加不是剪切板的功能也是可以的,读者可以自己尝试。