UIMenuController的示例spa
UIMenuController須知orm
讓其餘控件也支持UIMenuController(好比UILabel)get
```objc /* * 讓label有資格成爲第一響應者/ - (BOOL)canBecomeFirstResponder { return YES; }string
/* * label能執行哪些操做(好比copy, paste等等) * @return YES:支持這種操做/ - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:)) return YES;it
return NO;io
} ```ast
```objc - (void)cut:(UIMenuController *)menu { // 將本身的文字複製到粘貼板 [self copy:menu];form
// 清空文字class
self.text = nil;cli
}
objc // 這裏的self是label [self becomeFirstResponder];
objc UIMenuController *menu = [UIMenuController sharedMenuController]; // targetRect: MenuController須要指向的矩形框 // targetView: targetRect會以targetView的左上角爲座標原點 [menu setTargetRect:self.bounds inView:self]; // [menu setTargetRect:self.frame inView:self.superview]; [menu setMenuVisible:YES animated:YES];
自定義UIMenuController內部的Item
objc // 添加MenuItem(點擊item, 默認會調用控制器的方法) UIMenuItem *ding = [[UIMenuItem alloc] initWithTitle:@"頂" action:@selector(ding:)]; UIMenuItem *replay = [[UIMenuItem alloc] initWithTitle:@"回覆" action:@selector(replay:)]; UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:@"舉報" action:@selector(report:)]; menu.menuItems = @[ding, replay, report];
代碼示例
1、讓label有menu,須要自定義label
- (void)awakeFromNib
{
[self setup];
}
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setup ];
}
return self;
}
- (void)setup
{
//label必定要能夠交互
self.userInteractionEnabled = YES;
[self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(click)]];
}
/**
* 讓label有資格成爲第一響應者
*/
- (BOOL)canBecomeFirstResponder
{
return YES;
}
/**
* label能執行哪一個操做(好比copy、paste)等
*/
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
//只返回YES支持全部操做
if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:)) {
return YES;
}
// 自定義menu的時候,這裏放回NO就好了
return NO;
}
/**
* 剪切方法
*/
- (void)cut:(UIMenuController *)menu
{
//將文字保存到粘貼板
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
pasteBoard.string = self.text;
//清空label的文字
self.text = nil;
}
- (void)copy:(UIMenuController *)menu
{
//將文字保存到粘貼板
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
pasteBoard.string = self.text;
}
// 粘貼
- (void)paste:(UIMenuController *)menu
{
//將文字保存到粘貼板
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
self.text = pasteBoard.string;
}
- (void)click
{
//1、讓label成爲第一響應者
[self becomeFirstResponder];
//2、顯示MenuController
UIMenuController *menu = [UIMenuController sharedMenuController];
//menu圍着哪一個區域顯示,顯示上下左右由系統決定
//[menu setTargetRect:self.frame inView:self.superview];
//或者
[menu setTargetRect:self.bounds inView:self];
//自定義menu
//顯示menu菜單
[menu setMenuVisible:YES animated:YES];
}
2、自定義menu
UILabel *secondLabel = [[UILabel alloc] init];
secondLabel.frame = CGRectMake(100, 200, 100, 50);
secondLabel.backgroundColor = [UIColor yellowColor];
[secondLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickPP)]];
secondLabel.text = @"ppppppp";
secondLabel.userInteractionEnabled = YES;
self.label = customLabel;
[self.view addSubview:secondLabel];
self.label = secondLabel;
- (void)clickPP
{
//1、讓label成爲第一響應者
[self becomeFirstResponder];
//2、顯示MenuController
UIMenuController *menu = [UIMenuController sharedMenuController];
//menu圍着哪一個區域顯示,顯示上下左右由系統決定
//[menu setTargetRect:self.frame inView:self.superview];
//或者
[menu setTargetRect:self.label.bounds inView:self.label];
//自定義menu
//自定義menu的按鈕方法必須放在控制器中
UIMenuItem *ding = [[UIMenuItem alloc] initWithTitle:@"頂" action:@selector(ding:)];
UIMenuItem *replay = [[UIMenuItem alloc] initWithTitle:@"回覆" action:@selector(replay:)];
UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:@"舉報" action:@selector(report:)];
menu.menuItems = @[ding,replay,report];
//顯示menu菜單
[menu setMenuVisible:YES animated:YES];
}
/**
* 讓label有資格成爲第一響應者
*/
- (BOOL)canBecomeFirstResponder
{
return YES;
}
/**
* 頂
*/
- (void)ding:(UIMenuController *)meun
{
NSLog(@"ding");
}
/**
* 頂
*/
- (void)replay:(UIMenuController *)meun
{
NSLog(@"replay");
}
/**
* 頂
*/
- (void)report:(UIMenuController *)meun
{
NSLog(@"report");
}