enj*_*yem 6 c# xamarin.ios xamarin uicollectionview
我有一个UICollectionView我需要独立收听滚动和选择事件的地方.我按如下方式分配Delegate和Scrolled事件处理程序:
public override void ViewWillAppear(bool animated)
(
base.ViewWillAppear(animated);
this.CollectionView.Delegate = this.CollectionViewDelegate;
this.CollectionView.Scrolled += HandleCollectionViewScrolled;
}
Run Code Online (Sandbox Code Playgroud)
但是,在我分配事件处理程序之后,不再调用委托方法.并扭转他们:
public override void ViewWillAppear(bool animated)
(
base.ViewWillAppear(animated);
this.CollectionView.Scrolled += HandleCollectionViewScrolled;
this.CollectionView.Delegate = this.CollectionViewDelegate;
}
Run Code Online (Sandbox Code Playgroud)
产生完全相反的结果(委托方法工作但没有滚动的监听器).
认为强类型委托的所有方法的必要实现可能会消除事件处理程序,我尝试分配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.");
}
}
Run Code Online (Sandbox Code Playgroud)
但同样,我得到了相同的结果:只有事件处理程序或委托触发.还有其他人经历过这个吗?这是Xamarin的问题吗?我期望设置弱委托不应必然消灭事件处理程序.
值得注意的是,作为一种解决方法,我尝试使用KVO.但是当我尝试观察contentOffset集合视图的属性时,KVO崩溃了应用程序(也许我使用了错误的密钥路径名称).