给UILabel扩充Copy功能
实现的原理:注册通知 添加手势识别 调用粘贴板
具体实现 创建UICopyLabel类 继承UILabel
代码
UICopyLabel.h文件
#import <UIKit/UIKit.h> @interface UICopyLabel : UILabel @end
UICopyLabel.m文件
#import "UICopyLabel.h" @implementation UICopyLabel - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [super dealloc]; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self attachTapHandlerAndAddObserver]; } return self; } -(id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self attachTapHandlerAndAddObserver]; } return self; } -(void)attachTapHandlerAndAddObserver { self.userInteractionEnabled = YES; //用户交互的总开关 UILongPressGestureRecognizer *touch = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; [self addGestureRecognizer:touch]; self.exclusiveTouch = YES; [touch release]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cancelLabelBackgroundColor) name:UIMenuControllerDidHideMenuNotification object:nil]; } -(BOOL)canBecomeFirstResponder { return YES; } //还需要针对复制的操作覆盖两个方法: // 可以响应的方法 -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { self.backgroundColor = [UIColor clearColor]; return (action == @selector(copy:)); } //针对于响应方法的实现 -(void)copy:(id)sender { UIPasteboard *pboard = [UIPasteboard generalPasteboard]; pboard.string = self.text; } -(void)handleTap:(UIGestureRecognizer*) recognizer { [self becomeFirstResponder]; UIMenuItem *copyLink = [[[UIMenuItem alloc] initWithTitle:@"复制全部内容" action:@selector(copy:)]autorelease]; [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:copyLink, nil]]; [[UIMenuController sharedMenuController] setTargetRect:self.frame inView:self.superview]; [[UIMenuController sharedMenuController] setMenuVisible:YES animated: YES]; self.backgroundColor = [UIColor lightGrayColor]; } -(void)cancelLabelBackgroundColor { self.backgroundColor = [UIColor clearColor]; } @end
使用:把你需要支持copy的UILabel换成UICopyLabel 就OK了
时间: 2024-11-07 15:38:07