您的位置:首页 > 产品设计 > UI/UE

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

2015-10-10 17:27 513 查看
效果如下:





苹果只放出来了 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,运行就可以得到结果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: