我正在尝试处理tableViewCell的点击,但问题是这是"临时tableview"。我对其进行了编码,以便在用户编辑UITEXTFIELD时会出现,但是后来我设置了一个手势识别器,以将tableView设置为"隐藏",一旦用户单击远离Uitextfield的某个地方。
我的手势识别器设置如下:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboard)];
[tap setCancelsTouchesInView:NO];
[self.view addGestureRecognizer:tap];
但是,在调用 didSelectRowatIndExpath之前,请调用diverkeyboard ,因此我要处理事件的表视图变得隐藏了,因此此函数从未调用。
我的问题是:有人对如何解决这个问题有想法,以便 didSelectRowatIndExpath 将在tableview hide之前执行?我有一个想法可以以某种方式查看TableView是否是Tap的来源,如果是,请不要在diverkekeyboard中执行" hide tableview"行。这可能吗?
对不起,但是我是iOS开发人员的新手,所以谢谢您的任何建议!
您应该能够通过使您的视图控制器tap tap手势的代表并否认表视图内的任何触摸来做到这一点。这是一个起点:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch
{
//Assuming your table view is a direct subview of the gesture recognizer's view
BOOL isInsideTableView = CGRectContainsPoint(tableView.frame, [touch locationInView:gesture.view])
if (isInsideTableView)
return NO;
return YES;
}
希望这会有所帮助!
您可以将自己设置为uitapgesturerecognizer的委托,并在用户点击tableview中取消手势。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
//You can also (and should) check to make sure the gestureRecognizer is the tapGestureRecognizer
if (touch.view == tableView)
{
return NO;
}
else
{
return YES;
}
}
为了更好地适应您需要的东西,判断您的搜索栏是否是第一响应者。
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch
{
BOOL isInsideTableView = CGRectContainsPoint(yourTabelView.frame, [touch locationInView:gesture.view]);
if (isInsideTableView && ![yourSearchBar isFirstResponder])
return NO;
return YES;
}