Я хотел бы дождаться отображения контроллера с помощью PresentModalViewController (), чтобы завершить свою работу, прежде чем возобновить выполнение (например, модальные диалоги в WinForms).Как это можно сделать с помощью monotouch?
Я знаю, что есть аналогичный вопрос для SO, но ответ для Objective-C и, честно говоря, я не понимаю.
Большое спасибо.
РЕДАКТИРОВАТЬ
Вот первая настройка, которую я пробовал и которая, похоже, не работает:
- Создать новый проект (приложение с одним представлением);
- Добавить два контроллера (iPhone View Controller): 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);
}
}
В этой настройке блоки выполнения (черный экран загрузки) и первый контроллер не загружаются.
Если вызов метода 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);
}
}