tableviewcell 长按出现的快捷菜单这个功能估计大家在项目中用到的比较少
首先我们来看一下效果图,长按cell4后出现效果。
实现这个功能只需要动用三个方法,都是tableview本身有的
第一个方法
-(BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath
{//允许Menu菜单出现
return YES;
}
第二个方法
-(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender
{
return YES; // 表示全部的cell都可以显示menu菜单
//显示 cut,copy,paste
if (action == @selector(cut:)){
return YES;
} else if(action == @selector(copy:)){
return YES;
} else if(action == @selector(paste:)){
return YES;
} else if(action == @selector(select:)){
return NO;
} else if(action == @selector(selectAll:)){
return NO;
} else {
return [super canPerformAction:action withSender:sender];
}
}
第三个方法
-(void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{
if (action == @selector(copy:)) {
[UIPasteboard generalPasteboard].string = [DataArray objectAtIndex:indexPath.row];
}else if (action == @selector(cut:)){
[UIPasteboard generalPasteboard].string = [DataArray objectAtIndex:indexPath.row];
[DataArray replaceObjectAtIndex:indexPath.row withObject:@"已剪切"];//被剪切的一行所用的字符串来代替,可以为空串,不能为nil
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}else if (action == @selector(paste:)){
NSString *pasteString = [UIPasteboard generalPasteboard].string;
NSString *temString = [NSString stringWithFormat:@"%@%@",[DataArray objectAtIndex:indexPath.row],pasteString];
[DataArray replaceObjectAtIndex:indexPath.row withObject:temString];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
}
三个方法就可以实现上述功能了,动手试试吧!