1

我有一个使用 UITableViewController 的应用程序。我尝试为每个单元格实现一个弹出菜单,如下所示(Moke 应用程序):

在此处输入图像描述

当用户点击一个单元格时,当用户点击一个菜单项时,应用程序将显示一个弹出菜单。它将触发具有相关单元信息的操作。例如,索引路径。

我正在使用PopoverView来实现此功能。因为 PopoverView API 需要 showPopoverAtPoint 参数,即 CGPoint:

[PopoverView showPopoverAtPoint:point inView:self withContentView:aView delegate:self];

我必须注册一个 UITapGestureRecognizer 来捕捉点击事件

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
singleTap.delegate = self;
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.tableView addGestureRecognizer:singleTap];

然后显示弹出框。

- (void)handleTap:(UITapGestureRecognizer *)tap {
if (UIGestureRecognizerStateEnded == tap.state) {
    UITableView *tableView = (UITableView *)tap.view;
    CGPoint p = [tap locationInView:tap.view];
    NSIndexPath* indexPath = [tableView indexPathForRowAtPoint:p];
    [tableView deselectRowAtIndexPath:indexPath animated:NO];

    UIToolbar *toolbar = [[UIToolbar alloc] init];
    NSMutableArray* barbuttonsArray = [[NSMutableArray alloc] initWithCapacity:5];
    UIBarButtonItem * twitterButton = [[UIBarButtonItem alloc] initWithTitle:@"twitter"
                                                                        style:UIBarButtonItemStylePlain
                                                                       target:self
                                                                       action:@selector(twitterButton:)];

    twitterButton.style = UIBarButtonItemStyleBordered;
    [barbuttonsArray  addObject:twitterButton];


    [toolbar setItems:barbuttonsArray  animated:NO];

    [PopoverView showPopoverAtPoint:p inView:tableView withContentView:toolbar  delegate:nil];
}

}

我还在 PopoverView 中放置了一个 UIToolbar 以显示带有一些菜单项的工具栏。在这个实现中,我需要使用 UITapGestureRecognizer 来处理点击事件。我可以在 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 中执行它并获取 CGPoint 吗?此外,当 PopoverView 显示时,它会禁用所有其他手势,例如滚动或点击另一个单元格。我不希望用户在显示弹出视图时点击它。当用户尝试做其他事情时,PopoverView 应该自动关闭,例如:滚动表格视图。

回顾一下问题:

1) UITableViewCell 中的这个弹出菜单是否有任何 cocoapod 可用?

2)如果不是,我可以从 didSelectRowAtIndexPath 获取 CGPoint 而不是使用 UITapGestureRecognizer 吗?

3) 如何在 PopoverView 显示时启用手势并自动关闭它?

提前致谢。

杰克

4

1 回答 1

1
  1. 我不确切知道 cocoapod 可以做到这一点。

  2. 我认为您可以在 didSelectRowAtIndexPath 方法中使用以下代码:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

CGFloat pointY = ((int)(cell.frame.origin.y - tableView.contentOffset.y)/cell.frame.size.height)*cell.frame.size.height;
  1. 我对 PopoverView 知之甚少,我总是使用 UIView 自己完成这一切。
于 2013-07-31T05:40:15.980 回答