UIMenuController演示
要想在你的view或者viewController中實(shí)現(xiàn)長(zhǎng)按彈出菜單欄你必須要調(diào)用becomeFirstResponder方法,其次要實(shí)現(xiàn)canBecomeFirstResponder方法,并返回YES.
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)UILabel *label;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
_label = [[UILabel alloc]initWithFrame:CGRectMake(60, 100, 200, 50)];
_label.text = @"我是一個(gè)label";
_label.textAlignment = NSTextAlignmentCenter;
_label.textColor = [UIColor blackColor];
_label.userInteractionEnabled = YES;
//添加長(zhǎng)按手勢(shì)
[_label addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]];
[self.view addSubview:_label];
}
-(void)longPress:(UILongPressGestureRecognizer *)sender{
if (sender.state == UIGestureRecognizerStateBegan) {
[self.view becomeFirstResponder];
_label.backgroundColor = [UIColor lightGrayColor];
UIMenuController *menu = [UIMenuController sharedMenuController];
//復(fù)制
UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"復(fù)制" action:@selector(copyItemClicked:)];
//收藏
UIMenuItem *collectItem = [[UIMenuItem alloc] initWithTitle:@"收藏" action:@selector(collectItemClicked:)];
//舉報(bào)
UIMenuItem *reportItem = [[UIMenuItem alloc] initWithTitle:@"舉報(bào)" action:@selector(reportItemClicked:)];
menu.menuItems = @[copyItem,collectItem,reportItem];
[menu setMenuVisible:YES animated:YES];
[menu setTargetRect:_label.frame inView:self.view];
}
if (sender.state==UIGestureRecognizerStateEnded) {
_label.backgroundColor = [UIColor clearColor];
}
}
- (void)copyItemClicked:(UIMenuItem *)item{
NSLog(@"復(fù)制");
}
- (void)collectItemClicked:(UIMenuItem *)item{
NSLog(@"收藏");
}
- (void)reportItemClicked:(UIMenuItem *)item{
NSLog(@"舉報(bào)");
}
- (BOOL)canBecomeFirstResponder{
return YES;
}
// 有些控件會(huì)有系統(tǒng)的UIMenuItem,使用此方法篩選
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
/*
if (action == @selector(xxxxx)) {
return YES;
}
return NO;
*/
return YES;
}
注意
- 顯示UIMenuController前必須調(diào)用becomeFirstResponder
- 必須重寫(xiě)canBecomeFirstResponder方法返回YES
- 有些控件會(huì)有系統(tǒng)的UIMenuItem,使用canPerformAction:withSender:方法篩選出需要的item