gpt4 book ai didi

ios - 当我添加 UITapGestureRecognizer 处理程序方法时,为什么 TableView 委托(delegate)方法停止工作

转载 作者:行者123 更新时间:2023-11-29 02:58:30 25 4
gpt4 key购买 nike

我有一个 UITableViewController 和一个在弹出窗口中使用的 xib。它工作正常,直到我尝试将 UITapGestureRecognizer 添加到 View 中。将 tableview 作为 socket 集合连接到 UITapGestureRecognizer 后,当用户点击表中的某个项目时,点击处理程序会触发,但 tableview 的 didSelectRowAtIndexPath 方法不再触发。

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

这是我的表格 View 接线的样子...

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]];
}

这是我的接口(interface)文件的适用部分。所有物体都被合成...

#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]];
}
}

关于ios - 当我添加 UITapGestureRecognizer 处理程序方法时,为什么 TableView 委托(delegate)方法停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com