在带有 Xamarin.iOS 的 iOS 7 上的 ViewDidAppear 方法中显示阻止的 UIAlertView 不起作用

Posted

技术标签:

【中文标题】在带有 Xamarin.iOS 的 iOS 7 上的 ViewDidAppear 方法中显示阻止的 UIAlertView 不起作用【英文标题】:Showing a blocked UIAlertView in ViewDidAppear Method on iOS 7 with Xamarin.iOS does not work 【发布时间】:2013-09-04 07:00:35 【问题描述】:

如果我尝试在 ios 7 上的 ViewDidAppear 方法中显示被阻止的 AlertView,我将无法关闭 AlertView。 没有触摸事件会到达 AlertView。视图的按钮将突出显示,但没有任何反应。 如果我在 iOS

示例代码如下:

    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 版有同样的问题。

谁能告诉我问题出在哪里?

感谢您的帮助。

【问题讨论】:

iOS7 仍处于保密协议下,您无权公开讨论。 iOS7 今天发布。一个答案将不胜感激,因为我有同样的问题...... 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

很好地发现,我希望在即将发布的 iOS 版本中会有修复。 Erica Sadun 的 iOS6 Cookbook 有一个关于实现 ModalAlertDelegate 的收据:github.com/erica/iOS-6-Cookbook/blob/master/C03%20Alerts/… 这个秘诀在 iOS7 中不再适用,可怜的开发人员在他们的应用程序中应用了这个秘诀(就像我一样)。 是的,很多人基于这个 C# 示例使用 Monotouch / Xamarin 做了同样的事情:***.com/questions/4248244/iphone-uialertview-modal/…【参考方案3】:

你应该添加

alert.Clicked += AlertViewClick;

在里面做事

private void AlertViewClick (object sender, UIButtonEventArgs ea)

   //Stuff Here

并删除

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

【讨论】:

以上是关于在带有 Xamarin.iOS 的 iOS 7 上的 ViewDidAppear 方法中显示阻止的 UIAlertView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用啥控件从相机捕获图像并在 ui 上显示为带有事件 xamarin ios 的缩略图

Xamarin.iOS - 使用带有免费 iOS 开发证书的 iPhoneSimulator 钥匙串

Rider IDE 无法在 iPhone 设备上运行项目 Xamarin.iOS

Xamarin iOS UICollectionView.CellRegistration 带有泛型,它在哪里?

带有 PushSharp 应用程序的 Xamarin.IOS 会被 Apple AppStore 拒绝吗?

使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角