自定义剪切板,UIMenuController的使用

时间:2022-11-21 16:53:26

有的时候我们想要实现复制或剪切或粘贴功能。具体方式有两种,一种就是自己画个框实现界面效果,然后调用系统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 实现。 就是这么简单,其实如果你想要在一个框上添加不是剪切板的功能也是可以的,读者可以自己尝试。