ios3怎么取消长按弹出菜单_ios开发之实现长按UITableViewCell弹出UIMenuController

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

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

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

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

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

[cell addGestureRecognizer:longPressGesture];

returncell;

}

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方法)

[cellbecomeFirstResponder];

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

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

UIMenuController*menu = [UIMenuControllersharedMenuController];

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

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

[menusetMenuVisible:YESanimated: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{

returnYES;

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值