我有一个UICollectionView
,我需要从中独立地收听滚动和选择事件。我分配Delegate
和Scrolled
事件处理程序如下:Xamarin - 分配UICollectionViewDelegate消除事件处理程序(反之亦然)
public override void ViewWillAppear(bool animated)
(
base.ViewWillAppear(animated);
this.CollectionView.Delegate = this.CollectionViewDelegate;
this.CollectionView.Scrolled += HandleCollectionViewScrolled;
}
然而,当我指定事件处理程序,委托方法不再被调用。并扭转他们:
public override void ViewWillAppear(bool animated)
(
base.ViewWillAppear(animated);
this.CollectionView.Scrolled += HandleCollectionViewScrolled;
this.CollectionView.Delegate = this.CollectionViewDelegate;
}
产生完全相反的结果(委托方法的工作,但没有滚动监听器)。
思考的是,强类型委托的所有方法必要的实施可能会被抹了事件处理程序的时候,我试着而不是分配WeakDelegate
属性,它是一个NSObject
子类,只实现collectionView:didSelectItemAtIndexPath:
。
public class MyCollectionViewDelegate : NSObject
{
public MyCollectionViewDelegate() : base()
{
}
[Export ("collectionView:didSelectItemAtIndexPath:")]
public void ItemSelected(UICollectionView collectionView, MonoTouch.Foundation.NSIndexPath indexPath)
{
Console.WriteLine("It worked.");
}
}
但是,我得到了同样的结果:只有事件处理程序或委托触发。有没有其他人经历过这个?这是Xamarin的问题吗?我期望设置弱代表不应该必然会消除事件处理程序。
值得一提的是,作为解决方法,我尝试使用KVO。但是,当我尝试观察集合视图的contentOffset
属性(也许我使用错误的键路径名称)时,KVO崩溃了应用程序。