Xamarin iOS刷新控件被卡住
我的刷新控制有问题。。。我有以下代码: 在ViewDidLoad()中,我调用方法InitializeRefreshControl()强>Xamarin iOS刷新控件被卡住,xamarin,xamarin.ios,uirefreshcontrol,Xamarin,Xamarin.ios,Uirefreshcontrol,我的刷新控制有问题。。。我有以下代码: 在ViewDidLoad()中,我调用方法InitializeRefreshControl() private void InitializeRefreshControl() { if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0)) { //UIRefreshControl iOS6 ordersCollectionV
private void InitializeRefreshControl()
{
if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0))
{
//UIRefreshControl iOS6
ordersCollectionView.RefreshControl = new UIRefreshControl();
ordersCollectionView.RefreshControl.AttributedTitle = new NSAttributedString("Pull To Refresh",
new UIStringAttributes()
{
ForegroundColor = UIColor.Red,
KerningAdjustment = 3
});
ordersCollectionView.RefreshControl.ValueChanged += HandleValueChanged;
}
else
{
// old style refresh button and no PassKit for older iOS
NavigationItem.SetRightBarButtonItem(new UIBarButtonItem(UIBarButtonSystemItem.Refresh), false);
NavigationItem.RightBarButtonItem.Clicked += (sender, e) => { Refresh(); };
}
}
HandleValueChange方法和刷新方法如下:
private void HandleValueChanged(object sender, EventArgs e)
{
ordersCollectionView.RefreshControl.BeginRefreshing();
ordersCollectionView.RefreshControl.AttributedTitle = new NSAttributedString("Refreshing",
new UIStringAttributes()
{
ForegroundColor = UIColor.Blue,
KerningAdjustment = 5
});
Refresh();
ordersCollectionView.RefreshControl.EndRefreshing();
}
private void Refresh()
{
var viewModel = (OrdersViewModel)DataContext;
viewModel.OnReloadData();
}
我的问题是,当我下拉collectionVIew时,显示刷新加载,但没有加载效果,仍然显示文本“pull to Refresh”。当方法刷新结束时,0,1ms显示加载效果和文本“刷新”,但不是在方法刷新之前。。。有人知道如何解决这个问题吗?感谢您的回答。问题似乎与
刷新()有关代码>同步的方法。您需要在后台执行此操作,以便UI线程可以自由地为RefreshControl提供动画。例如:
private async void HandleValueChanged(object sender, EventArgs e)
{
ordersCollectionView.RefreshControl.BeginRefreshing();
ordersCollectionView.RefreshControl.AttributedTitle = new NSAttributedString("Refreshing",
new UIStringAttributes()
{
ForegroundColor = UIColor.Blue,
KerningAdjustment = 5
});
// await a Task so that operation is done in the background
await Refresh();
ordersCollectionView.RefreshControl.EndRefreshing();
}
// Marked async and Task returning
private async Task Refresh()
{
var viewModel = (OrdersViewModel)DataContext;
// Need to update this method to be a Task returning, async method.
await viewModel.OnReloadData();
}
上面的代码重构了您必须使用的异步/等待和任务。您可能需要重构更多的代码,包括OnReloadData()
方法
有很多资源可用于开始使用任务、异步和等待。我可以从Xamarin博客上的参考资料开始介绍。还是一样:/I这很奇怪。。但是,当我将INSTEADOFREFRESH()方法代码与计时器一起放入时,它会工作。。。。var timer=NSTimer.CreateRepeatingScheduledTimer(TimeSpan.FromSeconds(5.0),委托{ordersCollectionView.RefreshControl.EndRefreshing();});用您尝试过的内容更新您的帖子。听起来刷新方法仍然是同步的。计时器不会,这可能就是它工作方式不同的原因。