UIMenuController/UIPasteboard(1) 制作一个可以粘贴复制的Label

效果如下:

 

    苹果只放出来了 UITextView,UITextField,webView三个控件的剪贴板,所以我们要自定义可以复制粘贴的控件,首先需要打开UIResponder的两个方法:

- (BOOL)canBecomeFirstResponder{

    return YES;

}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender

{

    if (action == @selector(copy:)) {

        return  YES;

    }

    else if (action == @selector(paste:)) {

        return YES;

    } else if (action == @selector(cut:)) {

        return YES;

    } else if (action == @selector(select:)) {

        return YES;

    } else if (action == @selector(delete:)) {

        return NO;

    }

    return NO;

}

 OK,开放控件的剪贴板功能已经放出,剩下的就是实现了,话不多说,直接上代码:

 

//
//  CanCopyLabel.m
//  FeixunUniversal
//
//  Created by zpz on 15/10/10.
//  Copyright (c) 2015年 zpz. All rights reserved.
//

#import "CanCopyLabel.h"

@implementation CanCopyLabel
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
        self.userInteractionEnabled = YES;
        UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        [self addGestureRecognizer:touch];
    }
    return self;
}


- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(copy:)) {
        return  YES;
    }
    else if (action == @selector(paste:)) {
        return YES;
    } else if (action == @selector(cut:)) {
        return YES;
    } else if (action == @selector(select:)) {
        return YES;
    } else if (action == @selector(delete:)) {
        return NO;
    }
    return NO;
}



- (void)handleTap:(UIGestureRecognizer *)recognizer
{
    [self becomeFirstResponder];
    UIMenuController *menu = [UIMenuController sharedMenuController];
    [menu setTargetRect:self.frame inView:self.superview];
    [menu setMenuVisible:YES animated:YES];
}
- (BOOL)canBecomeFirstResponder{
    return YES;
}

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

- (void)paste:(id)sender
{
    self.textAlignment = UITextAlignmentRight;
    UIPasteboard *pboard = [UIPasteboard generalPasteboard];
    self.text = [NSString stringWithFormat:@"粘贴内容:%@",pboard.string];
    NSLog(@"pboard.string : %@",pboard.string);
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end

在VC中初始化:

    CanCopyLabel *canLabel = [[CanCopyLabel alloc] initWithFrame:CGRectMake(0, 64, kScreenW, 100)];
    canLabel.backgroundColor = [UIColor yellowColor];
    canLabel.text = @"我是谁";
    canLabel.textColor = [UIColor blueColor];
    [self.view addSubview:canLabel];

OK,运行就可以得到结果了。

 

posted @ 2015-10-10 17:27  Fk的展展  阅读(325)  评论(0)    收藏  举报