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,运行就可以得到结果了。

浙公网安备 33010602011771号