在带有 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 带有泛型,它在哪里?