backgroundTap隐藏didSelectRowAtIndexPath

时间:2013-04-08 15:49:27

标签: iphone cocoa-touch uitableview didselectrowatindexpath

我有一个带有UITableViewCells的UITableView,其中包含标签,其中包含将文本插入UITextView的建议。我希望当用户点击一些带有文本建议的uitableviewcell时,此文本将进入uitextview,但我也希望用户能够自己编辑uitextview。

所有工作正常,直到我想在开始编辑textview后添加点击背景的功能,这导致隐藏键盘(resignFirstResponder)。但是当我实现backgroundTap时,对didSelectRowAtIndexPath的调用就不再发生了。

如何解决这个问题,以便当用户点击某个uitableviewcell时,调用将是didSelectRowAtIndexPath而不是backgroundTap?

我的backgroundTap实现是:

   -(void)backgroundTap:(UITapGestureRecognizer *)tapGR{
       //...some code here...
   }

在viewWillAppear中我添加了一行:

[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTap:)]];

感谢。

1 个答案:

答案 0 :(得分:1)

问题在于轻敲手势识别器吃掉了用于桌面视图的水龙头。请参阅didSelectRowAtIndexPath: not being called

手势识别器不仅适用于它所附着的视图(在您的情况下为self.view),而且还适用于视图层次结构中所有视图的子视图。在这种情况下,它包括所有内容,包括表格视图单元格。

解决方案是使用手势识别器委托(iOS 5)或UIView gestureRecognizerShouldBegin:(仅限iOS 6)进行调解。