效果如下:
苹果只放出来了 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,运行就可以得到结果了。