我想等待一個控制器顯示與PresentModalViewController()來完成(在的WinForms像模態對話框)恢復執行前,它的工作。這怎麼能用monotouch完成?等待PresentModalViewController完成(MonoTouch的)
我知道有關於SO一similar question但得到的答覆是Objective-C的,坦率地說,我不明白這一點。
非常感謝。
編輯
這裏是我試圖和這似乎沒有工作,第一個設置:
- 創建一個新的項目(單一視圖應用);
- 添加兩個控制器(iPhone - 視圖 - 控制器):FirstController和SecondController;第一個控制器重寫DismissModalViewControllerAnimated並在被解散後立即觸發OnFirstFinished事件;
- 在主控制器:
...
public partial class TestModalViewController : UIViewController
{
private UIButton button;
private FirstController first;
private SecondController second;
public override void ViewDidLoad()
{
base.ViewDidLoad();
button = UIButton.FromType(UIButtonType.RoundedRect);
button.Frame = new RectangleF(0, 0, 100, 50);
button.SetTitle("Test", UIControlState.Normal);
button.TouchUpInside += PresentFirstController;
View.Add(button);
PresentFirstController(null, null);
}
void PresentFirstController (object sender, EventArgs e)
{
bool firstFinished = false;
first = new FirstController();
first.OnFirstFinished += delegate(object s, EventArgs args) {
firstFinished = true;
};
this.PresentModalViewController(first, true);
do
{
NSRunLoop.Current.RunUntil (NSDate.FromTimeIntervalSinceNow (0.5));
} while (!firstFinished);
second = new SecondController();
this.PresentModalViewController(second, true);
}
// ...
}
- 在FirstController:
...
public override void DismissModalViewControllerAnimated (bool animated)
{
base.DismissModalViewControllerAnimated (animated);
if(null != OnFirstFinished)
{
OnFirstFinished(this, null);
}
}
在此設置中,執行塊(bla ck加載屏幕)並且第一個控制器未加載。
如果調用PresentFirstController()從viewDidLoad中(去除),主控制器加載罰款並點擊「測試」按鈕時,第一控制器被加載。然而,在第一個控制器被解僱後,第二個控制器沒有被加載 - iOS似乎不喜歡在解散另一個控制器之後提交模態控制器。這可以通過增加一個小的延遲來解決像下面(但有多小仍是安全的?):
public override void DismissModalViewControllerAnimated (bool animated)
{
base.DismissModalViewControllerAnimated (animated);
NSRunLoop.Current.RunUntil (NSDate.FromTimeIntervalSinceNow(0.2));
if(null != OnFirstFinished)
{
OnFirstFinished(this, null);
}
}
謝謝米格爾,但是這一次的鎖,就像所有其他的嘗試我在等待第一個模式被解僱。我使用的代碼序列是:1)創建第一個控制器並訂閱自定義的「OnFinished」事件; 2)PresentModalViewController()3)當「OnFinished」未觸發時執行UI循環; 4)爲它創建第二個控制器和PresentModalViewController()。問題是第一個控制器甚至沒有顯示,而執行被鎖定在循環中。沒有循環顯示第一個模式,但不會等待控制器被解僱。 – 2011-12-27 08:19:42
實際上Miguel的建議確實有效,它僅在從ViewDidLoad()覆蓋中調用PresentModal()時才被阻止。稍後會發布一些代碼片段。 – 2011-12-27 09:01:57