在UITableViewCell中显示UIMenuController,分组样式

时间:2011-07-26 20:46:36

标签: uitableview uimenucontroller

是否有一种简单的方法可以在点击单元格时实现复制菜单,而不是为UITableViewCell创建子类?

感谢,

RL

2 个答案:

答案 0 :(得分:10)

在iOS 5中,一种简单的方法是实现UITableViewDelegate方法:

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath

- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender 

- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender 

通过实施3个代表,它将在长按手势后为您启用调用UIMenuController。例如:

/**
 allow UIMenuController to display menu
 */
- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

/**
 allow only action copy
 */
- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender 
{
    return action == @selector(copy:);
}

/**
 if copy action selected, set as cell detail text
 */
- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender 
{
    if (action == @selector(copy:))
    {
        UITableViewCell* cell = [tableView cellForIndexPath:indexPath];
        [[UIPasteboard generalPasteboard] setString:cell.detailTextLabel.text];
    }
}

答案 1 :(得分:2)

是的!
[[UIMenuController sharedMenuController] setMenuVisible:YES animated:ani](UITableView的委托方法)中调用ani(其中BOOL- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath确定控件是否应该是动画的)

编辑:UIMenuController上的'copy'命令默认情况下不会复制detailTextLabel.text文字。但是,有一种解决方法。将以下代码添加到您的班级中。

-(void)copy:(id)sender {
    [[UIPasteboard generalPasteboard] setString:detailTextLabel.text];
}


- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if(action == @selector(copy:)) {
        return YES;
    }
    else {
        return [super canPerformAction:action withSender:sender];
    }
}