我有一个可以上下滑动的条形图的集合视图。集合视图中的每个单元格都使用UIPanGestureRecognizer
来控制蓝条向上和向下滑动。集合视图不会在这里滚动。
有一种“编辑模式”可以禁用控制条形的平移手势。这里的希望是,在“编辑模式”中,集合视图可以向左和向右滚动。
我尝试这样做是为了禁用每个单元格中的平移手势。我还尝试使用UIGestureRecognizerDelegate
方法尝试禁用触摸并使单元格的平移手势失败,以支持集合视图的平移手势。似乎集合视图的平移手势不会转发到任何单元格的手势委托调用。
这些委托调用让我最接近(代表细胞的平移手势):
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
return !self.editMode // bar doesn't need to pan in edit mode
}
实现这个后,如果我在单元格之间的空白处开始平移,我可以平移集合视图。但是,在一个小区上开始平底锅不会做任何事情。
编辑:我向github上传了sample project个问题。
答案 0 :(得分:3)
如果我理解正确,我认为问题可能如下:
这实际上是有意义的,因为您的BarSliders高于CollectionView。我最好的做法是让BarSliders在需要时添加UIPanGestureRecognizer,并在编辑时将它们完全删除。
首先尝试删除您在VOLBarSliderCell中添加的var htmlD = htmlDoc.DocumentNode.SelectNodes("//td[a/@title='Proxy details']");
var numberProxies = htmlD.Count;
foreach(HtmlNode node in htmlD)
{
var ip = node.InnerText;
var port = node.SelectSingleNode("following-sibling::td[1]").InnerText;
Console.WriteLine("IP: {0} > Port: {1}", ip, port);
}
。
然后在KBHBarSlider中添加如下内容:(并确保你的init调用addPanRecognizer()而不是setup())
gestureRecognizer
现在可以根据需要添加和删除手势,可以通过VOLBarSliderCell中的编辑获取/设置覆盖来执行此操作:
func addPanRecognizer() {
let panGesture = UIPanGestureRecognizer(target: self, action: "viewDidPan:")
self.gestureRecognizers = [panGesture]
}
func removePanRecognizer() {
self.gestureRecognizers = []
}
答案 1 :(得分:1)
尝试在VOLBarSliderCell:29:
添加此代码self.panGesture.enabled = !self.editing
并删除:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if self.editing && gestureRecognizer == self.panGesture {
return false
}
return true
}
公平地说,你的问题对我来说并不清楚,所以无论如何我都试了一下,因为我还没有评论要求澄清。
我知道你想在编辑模式下滚动你的UICollectionView。这就是上面的代码所做的事情。如果您希望在不编辑时完全禁用UICollectionView滚动,则可以在UICollectionView上使用scrollEnabled = false。
更清楚地说明您要解决的问题是什么。这样你就可以得到准确的答案。
答案 2 :(得分:0)
你走在正确的轨道上。保持对leftRight gestureRecognizer的引用。然后在shouldReceiveTouch中,检查是否编辑和 gestureRecognizer是你的leftRight识别器
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if(self.editing && gestureRecognizer != self.leftRightRecognizer){
return 0;
}
return 1;
}