适用于iPhone的UITableViewCell中任何用于Popover菜单的Cocoapods

时间:2013-07-31 00:12:53

标签: iphone uitableview popover cocoapods

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

enter image description here

当用户点击一个单元格时,当用户点击一个菜单项时,应用程序将显示弹出菜单。它将触发具有相关单元信息的操作。例如,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显示时启用手势并自动关闭它?

提前致谢。

杰克

1 个答案:

答案 0 :(得分:1)

  1. 我不知道cocoapod到底能做些什么。

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

  3. 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自己完成这个。