我这里有一点建筑;我UITableViewCell
点UIViewController
,当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
时未被调用,因此无法使用该内容。
答案 0 :(得分:3)
来自UIResponder头文件:
对于正在处理的每次触摸,您的响应者都会收到
touchesEnded:withEvent:
或touchesCancelled:withEvent:
(这些触摸会在touchesBegan:withEvent:
中收到)。 您必须处理已取消的触摸,以确保您的应用程序中的正确行为。如果不这样做很可能导致不正确的行为或崩溃。
摘要:您还应该实施touchesCancelled:withEvent:
。
答案 1 :(得分:1)
如果某人遇到类似情况,我通过将新的viewcontroller视图添加为子视图而不是以模态方式呈现整个viewcontroller来解决此问题。这似乎可以让touchesEnded被调用。