我有一個ViewController中的UITableView執行segue到另一個ViewController的詳細視圖。部分詳細信息視圖是從異步Web服務填充的,這可能需要一些時間。
我希望我的UIAlertView在tableView接收到RowSelected事件時顯示,並在web服務調用完成後隱藏。顯示UIAlertView之前segue到下一個視圖
因爲它是現在的順序:
1.填充的UITableView(正常工作)
2.接收RowSelected事件(正常工作)
3.顯示UIAlertView中味精 「加載」(表示爲時已晚)
4.執行細節視圖(正常工作)
5.將全局變量的值加載到文本字段中。 (正常工作) 6.執行異步Web服務來獲得另外的細節信息(正常工作)
7.隱藏UIAlertView中(正常工作)
的問題是,只有UIAlertView中的步驟4和5
之間顯示出來來源爲RowSelected事件:
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
ActivityThread.Start ("Loading Quote list"); //shows UIAlertView
var quoteList = service.GetQuoteList(Globals.UserName,Globals.Password,Globals.CompanyId,Globals.SelectedCustomer.CustomerId);
Globals.QuoteSelected = quoteList[indexPath.Row];
ViewQuote viewQuote = new ViewQuote(QuoteViewController.handle);
viewQuote.PerformSegue("quoteSegue",this);
tableView.DeselectRow (indexPath, true);
}
源詳細視圖負載:
public override void ViewDidLoad()
{
base.ViewDidLoad();
handle = Handle;
//ActivityThread.Start("Retrieving Quote Data"); //shows UIAlertView too late
LoadGlobalVariables();
//hook up async websvc call
service.GetQuoteLineListCompleted += new GetQuoteLineListCompletedEventHandler(OnGetQuoteLineListCompleted);
service.GetQuoteLineListAsync(Globals.UserName,Globals.Password,Globals.CompanyId,Globals.SelectedCustomer.CustomerId,Globals.QuoteSelected.DocumentHeaderId);
}
來源爲asyncCompleted事件:
void OnGetQuoteLineListCompleted (object sender, GetQuoteLineListCompletedEventArgs args)
{
var QuoteLineList = args.Result;
QuoteItemTableView.Source = new QuoteItemTableSource(LoadLineData (QuoteLineList.ToList()));
ActivityThread.Stop(); //hide UIAlertview
}
來源爲ActivityThread:
public static class ActivityThread
{
private static Thread AcThread { get; set; }
private static UILoadingView _loadView
{ get; set;}
public static void Start(string title)
{
AcThread = new Thread(NewThreadMethod as ThreadStart);
_loadView = new UILoadingView("", title);
AcThread.Start();
_loadView.BeginInvokeOnMainThread (delegate{_loadView.Show();});
}
public static void Stop()
{
AcThread.Abort();
_loadView.BeginInvokeOnMainThread (delegate{_loadView.Hide();});
}
[Export("NewThreadMethod")]
static void NewThreadMethod()
{
using(var pool = new NSAutoreleasePool()) {}
}
}
如何獲得UIAlertView中去執行堆棧的頂部?
你可以發佈你的'ActivityThread'代碼嗎? – jonathanpeppers