我有一个使用 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 显示时启用手势并自动关闭它?
提前致谢。
杰克