UITableViewCell长按显示快捷菜单

来源:互联网 发布:广州数据分析培训班 编辑:程序博客网 时间:2024/06/11 23:57

长按会显示复制的一个快捷菜单,如图:



首先要定义快捷菜单显示的内容以及对应的selector,oschina客户端在AppDelegate里定义如下:

    UIMenuController *menuController = [UIMenuController sharedMenuController];        [menuController setMenuVisible:YES animated:YES];    [menuController setMenuItems:@[                                    [[UIMenuItem alloc] initWithTitle:@"复制" action:NSSelectorFromString(@"copyText:")],                                    [[UIMenuItem alloc] initWithTitle:@"删除" action:NSSelectorFromString(@"deleteObject:")]                                    ]];

定义了两个快捷菜单复制和删除。

然后在UITableViewCell里

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{    return _canPerformAction(self, action);}- (BOOL)canBecomeFirstResponder{    return YES;}- (void)copyText:(id)sender{    UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];    [pasteBoard setString:_contentLabel.text];}- (void)deleteObject:(id)sender{    _deleteObject(self);}

可以直接把第一个函数改写为,这样好理解,他那么写是还有其他操作:

return action==@selector(copyText:);

我们这里只相应复制的菜单。

然后在UIViewController里需要实现以下方法:

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath{    return YES;}- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{    return action == @selector(copyText:);}- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {    // required}

这样长按就会出现复制菜单,点击复制会调用UITableViewCell里定义的copyText:方法。

0 0
原创粉丝点击