打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ios开发之实现长按UITableViewCell弹出UIMenuController

项目中需要这个功能,网上找了下资料,有的说得不是很清楚,走了很多弯路才实现了,下面是实现步骤:

1.给cell添加UILongPressGestureRecognizer和相应处理事件

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

{    

   ..............

   UILongPressGestureRecognizer * longPressGesture =         [[UILongPressGestureRecognizer alloc]initWithTarget:selfaction:@selector(cellLongPress:)];

   [cell addGestureRecognizer:longPressGesture];

   return cell;

}

2.配置和显示UIMenuController

- (void)cellLongPress:(UIGestureRecognizer *)recognizer{   

    if (recognizer.state == UIGestureRecognizerStateBegan) {

        CGPoint location = [recognizer locationInView:self];

        NSIndexPath * indexPath = [self indexPathForRowAtPoint:location]; 

        UIMyTableViewCell *cell = (UIMyTableViewCell *)recognizer.view;

     //这里把cell做为第一响应(cell默认是无法成为responder,需要重写canBecomeFirstResponder方法)

        [cell becomeFirstResponder];

        

        UIMenuItem *itCopy = [[UIMenuItem allocinitWithTitle:@"复制"action:@selector(handleCopyCell:)];

        UIMenuItem *itDelete = [[UIMenuItem allocinitWithTitle:@"删除"action:@selector(handleDeleteCell:)];        

        UIMenuController *menu = [UIMenuController sharedMenuController];

[menu setMenuItems:[NSArray arrayWithObjects:itCopy, itDelete,  nil]];

        [menu setTargetRect:cell.frame inView:self];

        [menu setMenuVisible:YES animated:YES];

        

        [itCopy release];

        [itDelete release];

    }

}

- (void)handleCopyCell:(id)sender{//复制cell

    NSLog(@"handle copy cell");

}


- (void)handleDeleteCell:(id)sender{//删除cell

    NSLog(@"handle delete cell");

}



3.在自定义的cell里重写canBecomeFirstResponder方法,返回yes

//为了让菜单显示,目标视图必须在responder链中,很多UIKit视图默认并无法成为一个responder,因此你需要使这些视图重载 canBecomeFirstResponder方法,并返回YES

- (BOOL)canBecomeFirstResponder{

    return YES;

}


经过这几步,就可以成功显示了,又在网上看到一篇讲这个的外文,分享一下:

http://www.intridea.com/blog/2010/12/22/developers-notes-for-uimenucontroller


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
IOS学习笔记37
长按UITableViewCell弹出UIMenuController | LvesLi's Blogging
IOS学习笔记(六)inputAccessoryView,inputView
ios错误大全
iOS菜鸟学习——UIButton响应传参数
版本升级之'initWithFrame:reuseIdentifier:' is deprecated
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服