我有一个带有xib的UITableViewController,它正在popover中使用。它工作正常,直到我尝试向视图添加UITapGestureRecognizer。将tableview连接到UITapGestureRecognizer作为插座集合,当用户点击表格中的项目时,点击处理程序将触发,但tableview的didSelectRowAtIndexPath方法不再触发。
我想要做的是获得水龙头的位置,这样我就可以将下一个弹出窗口放在合理的位置。也许有更好的方法来做到这一点?
Heres是我的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 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
答案 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]];
}
}