繁体   English   中英

为什么在添加 UITapGestureRecognizer 处理程序方法时 TableView 委托方法停止工作

[英]Why does the TableView delegate methods stop working when I add a UITapGestureRecognizer handler method

我有一个 UITableViewController 和一个正在弹出窗口中使用的 xib。 在我尝试向视图添加 UITapGestureRecognizer 之前,它工作正常。 将 tableview 作为插座集合连接到 UITapGestureRecognizer,当用户点击 table 中的项目时,tap 处理程序会触发,但 tableview 的 didSelectRowAtIndexPath 方法不再触发。

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

这是我的 tableview 接线的样子......

在此处输入图片说明

这是识别器的接线...

在此处输入图片说明

这是我的点击处理程序,当用户选择一个项目时,它会很好地触发。

- (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 PopUpListViewControllerDelegate;

@interface PopUpListViewController : UITableViewController {
   id<PopUpListViewControllerDelegate> delegate;
   IBOutlet UITableView *poupListTableView;
   UIPopoverController *myPO;
   NSMutableArray *listItems;
   IBOutlet UITapGestureRecognizer *tapRecognizer;   
}
@property (assign) id<PopUpListViewControllerDelegate> 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

一种选择可能是使用点击处理程序中的 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]];
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM