在顶部显示ViewController时,UITableViewCell的touchesEnded未被调用

时间:2014-01-08 00:45:42

标签: ios iphone objective-c uitableview

我这里有一点建筑;我UITableViewCellUIViewController,当UITableViewController点击touchesBegin时,UITableViewCell类似touchesEnded。当UIViewController点击时,我会再次移除此touchesEnded

所以当你触摸单元格时我会显示一些内容,当你释放屏幕时我会再次隐藏它。一切都很好,但如果我在UITableViewCell上快速按下并释放它就行不通;在这种情况下,UITableViewCell未被调用。如果我持有它一秒或更长时间,系统工作正常。 'touchesCancelled'也没有被调用。

对此有何想法?由于焦点位于UIViewController,因此新显示的UITableViewController或现有-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; amDisplayingCapture = YES; [self.showCaptureDelegate displayCapture:self.capture]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesEnded:touches withEvent:event]; if( amDisplayingCapture ) { [self.showCaptureDelegate endDisplayCapture]; amDisplayingCapture = NO; } } 的触摸方法也不会触及(直到我发布并再次按下,但这会失败目的)。

相关代码:

didSelectRowAtIndexPath

UITableView的{​​{1}}在我出示新的UIViewController时未被调用,因此无法使用该内容。

2 个答案:

答案 0 :(得分:3)

来自UIResponder头文件:

  

对于正在处理的每次触摸,您的响应者都会收到touchesEnded:withEvent:touchesCancelled:withEvent:(这些触摸会在touchesBegan:withEvent:中收到)。 您必须处理已取消的触摸,以确保您的应用程序中的正确行为。如果不这样做很可能导致不正确的行为或崩溃。

摘要:您还应该实施touchesCancelled:withEvent:

答案 1 :(得分:1)

如果某人遇到类似情况,我通过将新的viewcontroller视图添加为子视图而不是以模态方式呈现整个viewcontroller来解决此问题。这似乎可以让touchesEnded被调用。