在viewDidLoad方法中添加如下代码:
//给列表添加长按手势
UILongPressGestureRecognizer *lpress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
lpress.minimumPressDuration = 1;
lpress.delegate = self;
[self.tableViews addGestureRecognizer:lpress];//tableViews是uitableview的变量
[lpress release];
要实现@selector(longPress:)中的longPress方法,当然方法名自定义即可
//长按列表项弹出菜单
- (void)longPress:(UILongPressGestureRecognizer *) gestureRecognizer {
CGPoint location = [gestureRecognizer locationInView:tableViews];//用来确定长按列表项时鼠标的位置
if (gestureRecognizer.state == UIGestureRecognizerStateBegan){
UIMenuController *menuController = [UIMenuController sharedMenuController];
//menu1、menu2、menu3、menu4必须要实现,否则也会出现无法显示对应的item的情况
UIMenuItem *menuItem1 = [[UIMenuItem alloc] initWithTitle:@"菜单1" action:@selector(menu1)];
UIMenuItem *menuItem2 = [[UIMenuItem alloc] initWithTitle:@"菜单2" action:@selector(menu2)];
UIMenuItem *menuItem3 = [[UIMenuItem alloc] initWithTitle:@"菜单3" action:@selector(menu3)];
UIMenuItem *menuItem4 = [[UIMenuItem alloc] initWithTitle:@"菜单4" action:@selector(menu4)];
ListCell *cell = (ListCell *)gestureRecognizer.view;//你tableview的cell
[cell becomeFirstResponder];
[menuController setMenuItems:[NSArray arrayWithObjects:menuItem1,menuItem2,menuItem3,menuItem4,nil]];
[menuController setTargetRect:CGRectMake(location.x, location.y, 50, 50) inView:tableViews];//location.x, location.y分别为长按那点的x和y坐标 tableViews为将要展示弹出框的视图
[menuController setMenuVisible:YES animated:YES];
[menuItem1 release];
[menuItem2 release];
[menuItem3 release];
[menuItem4 release];
}
}
实现了这些代码,菜单还不会弹出,这个纠结了我好长时间。。
//确保UIMenuItem可以弹出,必须重写该方法,返回yes,否则菜单不显示
-(BOOL) canBecomeFirstResponder{
return YES;
}