所以我正在尝试Xamarin Forms,我制作了一个控件,它有一个输出UICollectionView的渲染器。有问题的集合视图是从Objective C版本移植而来的。在Objective C版本中,我实现了collectionView:didSelectItemAtIndexPath:
,当我点击该方法被调用的项目时。但是在Xamarin版本中,似乎并非如此,并且未调用ItemSelected
方法。我尝试过使用Delegate
和WeakDelegate
版本都无济于事。我确保AllowsSelection
是真的。
我尝试将UIButton添加到单元格中,并且能够从其TouchUpInside处理程序中获取日志条目,因此我认为这不是另一个顶部窃取触摸视图的问题。平底锅和这样的工作。在模拟器中,我让它突出显示绘制的图层,并没有注意到任何可疑的东西。
任何人都有任何尝试的想法吗?感谢。
答案 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))]