我目前正在尝试为 iPhone 编写一个音乐播放器应用程序。设计的一部分是可以在歌曲列表的单个条目上滑动以显示其他选项(如在 iOS 7 Mail.app 中)。
我在自定义 UITableViewCell 的帮助下实现了这一点,它包含一个自定义 UIScrollView 和两个 UIView(一个用于实际内容,一个用于“背景菜单”),它们大部分都按预期工作。由于 UIScrollView 似乎接受了 TableViewCells 上的所有触摸,从而禁用了实际播放歌曲的选项,因此我转发了触摸事件(例如,此处建议):
细胞滚动视图.m
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
if (![self isDragging]){
[[self superview] touchesBegan:touches withEvent:event];
}
[super touchesBegan: touches withEvent: event];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
if (![self isDragging]){
[[self superview] touchesMoved:touches withEvent:event];
}
[super touchesMoved: touches withEvent: event];
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
if (![self isDragging]){
[[self superview] touchesCancelled:touches withEvent:event];
}
[super touchesCancelled: touches withEvent: event];
}
- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event{
if (![self isDragging]){
[[self superview] touchesEnded:touches withEvent:event];
}
[super touchesEnded: touches withEvent: event];
}
现在我的问题如下:当我按住列表中的一个单元格并开始滚动时,媒体播放器不会开始播放(如预期的那样)。但是当我点击列表中的任何其他条目时,播放的不是我点击的标题,而是我首先按住然后开始滚动的标题。仅当我在点击并按住之后不再滚动并通过点击停止滚动时才会发生这种情况(这会在日志中显示“滚动期间的意外触摸阶段”,我想这就是最终取消点击的原因-抓住)。
有没有办法纠正这种行为(如果我只使用普通的 UITableViewCell 一切正常,所以我猜 UIScrollView 会破坏一切)?