我有一個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崩潰了應用程序。