我的UICollectionView中没有ItemSelected调用?

时间:2014-06-19 20:55:18

标签: ios xamarin.ios uicollectionview

所以我正在尝试Xamarin Forms,我制作了一个控件,它有一个输出UICollectionView的渲染器。有问题的集合视图是从Objective C版本移植而来的。在Objective C版本中,我实现了collectionView:didSelectItemAtIndexPath:,当我点击该方法被调用的项目时。但是在Xamarin版本中,似乎并非如此,并且未调用ItemSelected方法。我尝试过使用DelegateWeakDelegate版本都无济于事。我确保AllowsSelection是真的。

我尝试将UIButton添加到单元格中,并且能够从其TouchUpInside处理程序中获取日志条目,因此我认为这不是另一个顶部窃取触摸视图的问题。平底锅和这样的工作。在模拟器中,我让它突出显示绘制的图层,并没有注意到任何可疑的东西。

任何人都有任何尝试的想法吗?感谢。

3 个答案:

答案 0 :(得分:1)

我不知道这是否可以帮到你,但是我使用Xamarin.Forms.Labs的GridView控件遇到同样的问题。

我在委托中看到方法" ItemSelected"没有被调用,而是调用" ItemHighlighted"方法。所以我使用它来使GridView选择项工作。

我希望这可以有所帮助。 :)

答案 1 :(得分:1)

仔细检查您是否已将UICollectionViewSource对象错误地分配给ColelctionView.Source而非ColelctionView.DataSource

答案 2 :(得分:1)

我最终解决了这个问题。发生的事情是Xamarin.Forms向页面的根添加了一个手势识别器,它取消了页面中的触摸。这通常效果很好,但在UICollectionView s干扰UICollectionView调用ItemSelected的情况下效果不佳。

我最终做的是创建这个自定义渲染器:

public class IosTapFixPageRenderer : PageRenderer {
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        foreach (var g in View.GestureRecognizers) {
            g.CancelsTouchesInView = false;
        }
    }
}

然后我使用通常的属性方法将此作为包含UICollectionView的问题页面的渲染器分配:

[assembly: ExportRenderer(typeof(CalendarPage), typeof(IosTapFixPageRenderer))]