我有一个使用UITableViewController的应用程序。我尝试为每个Cell实现一个弹出菜单,如下所示(Moke app):
当用户点击一个单元格时,当用户点击一个菜单项时,应用程序将显示弹出菜单。它将触发具有相关单元信息的操作。例如,IndexPath。
我正在使用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];
然后显示popover。
- (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来显示带有一些menuItems的工具栏。在此实现中,我需要使用UITapGestureRecognizer来处理tap事件。我可以在 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath并获取CGPoint吗?此外,当PopoverView显示时,它会禁用所有其他手势,例如滚动或点按另一个单元格。我不希望用户在显示时关闭popoverview。当用户尝试执行其他操作时,PopoverView应自动关闭,例如:滚动表视图。
回顾问题:
1)UITableViewCell中的弹出菜单是否有可用的cocoapod?
2)如果不是,我可以从didSelectRowAtIndexPath获取CGPoint而不是使用UITapGestureRecognizer吗?
3)如何在PopoverView显示时启用手势并自动关闭它?
提前致谢。
杰克
答案 0 :(得分:1)
我不知道cocoapod到底能做些什么。
我认为您可以在didSelectRowAtIndexPath方法中使用以下代码:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; CGFloat pointY = ((int)(cell.frame.origin.y - tableView.contentOffset.y)/cell.frame.size.height)*cell.frame.size.height;