当我添加UITapGestureRecognizer处理程序方法时,为什么TableView delagate方法停止工作

时间:2014-05-10 00:06:29

标签: ios uitableview uigesturerecognizer

我有一个带有xib的UITableViewController,它正在popover中使用。它工作正常,直到我尝试向视图添加UITapGestureRecognizer。将tableview连接到UITapGestureRecognizer作为插座集合,当用户点击表格中的项目时,点击处理程序将触发,但tableview的didSelectRowAtIndexPath方法不再触发。

我想要做的是获得水龙头的位置,这样我就可以将下一个弹出窗口放在合理的位置。也许有更好的方法来做到这一点?

Heres是我的tableview布线的样子......

enter image description here

以下是识别器的接线......

enter image description here

这是我的点按处理程序,当用户选择项目时,它会在接线时触发。

- (IBAction)tapHandler:(UITapGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
        tapPosition = [sender locationInView:self.view];
    }
}

这是didselectrowAtIndexPath方法。除非我连接tapGestureRecognizer,否则会很好......

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   [myPO dismissPopoverAnimated:YES];
   [self.delegate popupListItemSelected:self withItemRow:indexPath.row item:[listItems objectAtIndex:indexPath.row]];

}

以下是我的界面文件的适用部分。所有的对象都是合成的......

#import <UIKit/UIKit.h>

@protocol PopUpListViewControllerDelgate;

@interface PopUpListViewController : UITableViewController {
   id<PopUpListViewControllerDelgate> delegate;
   IBOutlet UITableView *poupListTableView;
   UIPopoverController *myPO;
   NSMutableArray *listItems;
   IBOutlet UITapGestureRecognizer *tapRecognizer;   
}
@property (assign) id<PopUpListViewControllerDelgate> delegate;
@property (retain, nonatomic) IBOutlet UITableView *poupListTableView;
@property (retain, nonatomic) NSMutableArray *listItems;

@property (retain, nonatomic) IBOutlet UITapGestureRecognizer *tapRecognizer;
- (IBAction)tapHandler:(UITapGestureRecognizer *)sender;
- (CGPoint)getTappedPosition;

@end

1 个答案:

答案 0 :(得分:1)

一个选项可能是使用点击处理程序中的CGPoint并使用UITableView方法查找相应的行:

- (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;

所以,你的tapHandler可能会处理所有事情:(警告!未经测试的伪代码!)

- (IBAction)tapHandler:(UITapGestureRecognizer *)sender {

    if (sender.state == UIGestureRecognizerStateEnded) {
        tapPosition = [sender locationInView:self.view];

        // use the appropriate name for your tableView, of course.
        CGPoint pointInTable = [sender locationInView:self.tableView];
        NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint:pointInTable];

       [myPO dismissPopoverAnimated:YES];
       [self.delegate popupListItemSelected:self withItemRow:indexPath.row item:[listItems objectAtIndex:indexPath.row]];
    }
}