forked from zoul/UILabel-Clipboard-Sample
-
Notifications
You must be signed in to change notification settings - Fork 2
/
CopyLabel.m
79 lines (68 loc) · 1.93 KB
/
CopyLabel.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#import "CopyLabel.h"
@interface CopyLabel ()
- (void) unhilight;
@end
@implementation CopyLabel
#pragma mark Initialization
- (void) attachTapHandler
{
[self setUserInteractionEnabled:YES];
UIGestureRecognizer *touchy = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleTap:)];
[self addGestureRecognizer:touchy];
}
- (id) initWithFrame: (CGRect) frame
{
self = [super initWithFrame:frame];
if (self) {
[self attachTapHandler];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
[self attachTapHandler];
}
return self;
}
- (void)setTarget:(id)target forCopyAction:(SEL)action{
copyTarget = target;
copyAction = action;
}
#pragma mark Clipboard
- (void) copy: (id) sender
{
if (copyTarget) {
if ([copyTarget respondsToSelector:copyAction]) {
[copyTarget performSelector:copyAction withObject:self];
}
} else {
[[UIPasteboard generalPasteboard] setString:self.text];
}
}
- (void) unhilight{
self.highlighted = NO;
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerWillHideMenuNotification object:nil];
}
- (BOOL) canPerformAction: (SEL) action withSender: (id) sender
{
return (action == @selector(copy:));
}
- (void) handleTap: (UIGestureRecognizer*) recognizer
{
[self becomeFirstResponder];
UIMenuController *menu = [UIMenuController sharedMenuController];
if ([menu isMenuVisible]) {
} else {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(unhilight) name:UIMenuControllerWillHideMenuNotification object:nil];
[menu setTargetRect:self.frame inView:self.superview];
[menu setMenuVisible:YES animated:YES];
self.highlighted = YES;
}
}
- (BOOL) canBecomeFirstResponder
{
return YES;
}
@end