【发布时间】:2014-05-10 00:06:28
【问题描述】:
我有一个 UITableViewController 和一个在弹出窗口中使用的 xib。在我尝试将 UITapGestureRecognizer 添加到视图之前,它工作正常。将 tableview 作为一个 outlet 集合连接到 UITapGestureRecognizer,当用户点击 table 中的一个项目时,点击处理程序会触发,但 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
【问题讨论】:
-
轻击手势识别器正在吃用于表格视图的轻击。你期望这如何工作?你不能一边吃蛋糕一边吃……
-
好的。所以我无法以这种方式获得水龙头位置。这是基本问题。您可以 presentPopoverFromRect 或 presentPopoverFromBarButtonItem 但如果您要从弹出框中的选定项目中弹出另一个弹出框,您如何在靠近用户点击的位置呈现新的弹出框?
-
您不应该同时放置两个弹出框,这样就不会出现问题。当用户点击弹出框的表格行时,通常的做法是将新视图推送到导航控制器上(在同一个弹出框内)。
-
我看到了您的其他答案,并将尝试使用您的建议,但在参考您的评论时,我并没有尝试同时放置 2 个弹出框。用户获得一个弹出框,并根据他们选择的内容关闭弹出框并显示另一个弹出框,其内容基于他们在第一个弹出框中选择的内容。哦!我明白你在说什么......使用相同的弹出框。有趣,但它可能会很困难,因为第二个弹出框的数据是从一个 URL 请求中检索到 Web 服务器的。打算试试看。
-
马克,谢谢你让我直截了当。重新加载弹出框效果很好!请将您的建议作为对我的问题的答案发布,以便我将其标记为已回答。我相信您发布的答案也会有效,但重新加载效果会更好。
标签: ios uitableview uigesturerecognizer