6

如果我尝试在 iOS 7 上的 ViewDidAppear 方法中显示被阻止的 AlertView,我将无法关闭 AlertView。没有触摸事件会到达 AlertView。视图的按钮将突出显示,但没有任何反应。如果我在 iOS < 7 上运行相同的代码,它会正常工作。

这是示例代码:

    public override void ViewDidAppear(bool animated)
    {
        base.ViewDidAppear(animated);

        var alert = new UIAlertView("Title", "Message", null, "OK");
        alert.Dismissed += (sender, args) => result = true;
        alert.Show();

        while (!result)
            NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.1));
    }

我将 Xamarin.iOS 版本 6.4.3.0 与 Apple SDK 6.1 一起使用。我对 Xamarin.iOS 6.9.6.0 和 Apple SDK 7.0 的 alpha 版有同样的问题。

有人可以告诉我问题是什么吗?

感谢帮助。

4

3 回答 3

2

用它来阻止 UI 执行并不是一个好主意NSRunLoop,但肯定有更好的方法来做到这一点。

您可以使用 async/await 模式等待用户按下UIAlertView按钮。这是您可以使用的示例:https ://gist.github.com/prashantvc/6725882

于 2013-09-30T11:08:02.837 回答
1

根据这个 Apple 开发者论坛主题,iOS 7 存在一个错误,即一旦启动 RunLoop,就永远不会调用 UIAlertView 委托。据一位人士称,它可能仍然可以在 iPad 上运行。如果找到修复或解决方法,您可以订阅该论坛主题的电子邮件更新。

于 2013-09-30T18:46:56.063 回答
-1

你应该添加

alert.Clicked += AlertViewClick;

做事

private void AlertViewClick (object sender, UIButtonEventArgs ea)
{
   //Stuff Here
}

并删除

 while (!result)
            NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.1));
于 2013-09-23T07:39:25.090 回答