额 为了实现这个效果。。。怎么说呢 还好Xcode有自带的 不然真心费劲( ⊙o⊙ )哇
最后发现实现这个需要配合长按手势 和 UImenuController
UILongPressGestureRecognizer * longPressGr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressToDo:)];
longPressGr.minimumPressDuration = 0.5;
[self.tableView addGestureRecognizer:longPressGr];
这是长按手势 然后再长按手势里添加UIMenuController
#pragma mark - 长按弹出菜单
-(void)longPressToDo:(UILongPressGestureRecognizer *)gesture{
if(gesture.state == UIGestureRecognizerStateBegan)
{
CGPoint point = [gesture locationInView:self.tableView];
_touchPoint =point;
//这里要获取到你点击时候的位置
[self addMenuController];
}
}
#pragma mark 菜单选项
-(void)addMenuController{
UIMenuController *menuController =[UIMenuController sharedMenuController];
UIMenuItem *menuitem1 =[[UIMenuItem alloc]initWithTitle:@"复制" action:@selector(doCopy:)];
//@selset里面的方法是你点击弹出menucontroller其中一个所要执行的方法
UIMenuItem *menuitem2 =[[UIMenuItem alloc]initWithTitle:@"保存" action:@selector(doSavePhoto:)];
UIMenuItem *menuitem3 =[[UIMenuItem alloc]initWithTitle:@"转发" action:@selector(doForward:)];
[menuController setTargetRect:CGRectMake(_touchPoint.x, _touchPoint.y, 0, 50) inView:self.tableView];
[menuController setMenuVisible:YES animated:YES];
}
//复制
-(void)doCopy:(id)sender{
UIPasteboard *pboard = [UIPasteboard generalPasteboard];
//这其实就是一个剪切板 UIPasteboard
pboard.string = self.messageVo.body;
[MBProgressHUD showSuccess:@"复制成功"];
}
//转发
-(void)doForward:(id)sender{
DCSAddMessageViewController *add = [[DCSAddMessageViewController alloc]init];
add.checkIsForward = YES;
add.inMessageVo = self.messageVo;
[self.navigationController pushViewController:add animated:YES];
}
//保存图片
-(void)doSavePhoto:(id)sender{
NSURL *url = [NSURL URLWithString:self.messageVo.attachmentVo.attachUrl];
UIImageView *viw = [[UIImageView alloc]init];
[viw sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if(!error) {
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
}
}];
}