你见过却不知道的UIMenuController

前言:最近一段时间都在做项目,写博客很少,这几天会把项目中遇到的一些小知识点总结分享给大家.

先看一下图,苹果自带的UIMenuController都在什么地方
  • UITextFiled
你见过却不知道的UIMenuController_第1张图片
UITextFiled.png
  • UITextView
你见过却不知道的UIMenuController_第2张图片
UITextView.png
  • UIWebView
你见过却不知道的UIMenuController_第3张图片
UIWebView.png
  • 由以上3张图可以看出UITextFiled,UITextView,UIWebView,在这几个控件上点击时都能够弹出UIMenuController,以便我们实现拷贝,粘贴等功能, 但我们在实际开发过程中有可能有这样的需求,如下图
你见过却不知道的UIMenuController_第4张图片
cell.png
  • 大家都知道, cell不具备以上功能的,需要我们自己实现这种需求,下面为了方便演示,我对前三张图片中的UILable实现上述功能.

  • 要让UILable实现上述功能我们需要对UILable进行重写,代码如下;

#import "ZHLable.h"

@implementation ZHLable

- (void)awakeFromNib
{
    // 给lable添加手势
    [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClick)]];
}

/**
 *  label可以成为第一响应者
 */
- (BOOL)canBecomeFirstResponder
{
    return YES;
}

/**
 *  监听label点击
 */
- (void)labelClick
{
    // 成为第一响应者
    [self becomeFirstResponder];
    
    // 弹出MenuController
    UIMenuController *menu = [UIMenuController sharedMenuController];
    // 设置显示的范围
    //    [menu setTargetRect:self.bounds inView:self];
    [menu setTargetRect:self.frame inView:self.superview];
    [menu setMenuVisible:YES animated:YES];
}

/**
 *  这个方法决定了MenuController的菜单项内容
 *  返回YES,就代表MenuController会有action菜单项
 */
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(cut:)
        || action == @selector(copy:)
        || action == @selector(paste:)) return YES;
    return NO;
}

#pragma mark - 菜单点击处理
- (void)cut:(UIMenuController *)menu
{
    // 将当前label的文字设置到粘贴板
    [UIPasteboard generalPasteboard].string = self.text;
    
    // 清空文字
    self.text = nil;
}

- (void)copy:(UIMenuController *)menu
{
    // 将当前label的文字设置到粘贴板
    [UIPasteboard generalPasteboard].string = self.text;
}

- (void)paste:(UIMenuController *)menu
{
    // 将粘贴板的文字设置到当前label上
    self.text = [UIPasteboard generalPasteboard].string;
}

@end


  • OK,这样我们实现了上述功能, 如下图:
你见过却不知道的UIMenuController_第5张图片
lable.png
上述实现过程也不是很难,关键是大家需要知道有这个功能,当项目有这样的需求知道怎么做就行

注: 上面整个示例过程可能对于初学者可能还存在以下问题

  • (一)语言问题:
你见过却不知道的UIMenuController_第6张图片
语言问题.png

解决方法:

你见过却不知道的UIMenuController_第7张图片
语言解决.png
  • (二)UILable默认不能与用户交互
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;  // default is NO

解决方法:
1⃣️
lable.userInteractionEnabled = YES;
2⃣️

你见过却不知道的UIMenuController_第8张图片
交互.png

你可能感兴趣的:(你见过却不知道的UIMenuController)