CodeGo.net>如何使用UIAlertController从UIViewController显示警报消息

我正在尝试在UIViewController中使用UIAlertController显示消息.
使用VisualStudio 2015 CTP 5 …

来自的二手样品:

http://forums.xamarin.com/discussion/26404/uialertcontroller-question-for-ipad
http://www.hjerpbakk.com/blog/2014/11/23/from-uialertview-to-uialertcontroller-using-xamarin-and-async-await
https://gist.github.com/Sankra/622e5855f95189e13d77

根据以上示例,到目前为止,我有:

public partial class MyViewController : GenericViewController //inherits from UIViewController 
{
   .....
     public async override void ViewDidLoad()
     {
            try
            {

                base.ViewDidLoad();
                //other irrelevant code here
                throw new Exception("Something went wrong");
            }
            catch (Exception ex)
            {
                    int result =   await AlertViewControllerHelper.ShowAlertDialogAsync(this, ex.StackTrace, true); 
            }
     }  
      ........
}

我的静态助手类:

public static class AlertViewControllerHelper 
{
public static Task<int> ShowAlertDialogAsync(UIViewController parent, string stackTrace, bool debugMode = false)
{

    var taskCompletionSource = new TaskCompletionSource<int>();

    try
    {
        var alert = UIAlertController.Create("Error", stackTrace, UIAlertControllerStyle.ActionSheet);
        if (alert.PopoverPresentationController != null)
        {
            alert.PopoverPresentationController.SourceView = parent.View;
            alert.PopoverPresentationController.SourceRect = parent.View.Bounds;
        }

        alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default,
            a => taskCompletionSource.SetResult(0)));
        if (debugMode)
        {
            alert.AddAction(UIAlertAction.Create("Info", UIAlertActionStyle.Default,
                a => taskCompletionSource.SetResult(1)));
        }

        parent.PresentViewController(alert, true, null);

    }
    catch (Exception ex)
    {               
    }
    return taskCompletionSource.Task;
}

运行代码后,未显示我的错误对话框.
我已经使用UIAlertView完成了一个示例,但是到目前为止,UIAlertController还是没有运气(这是我的要求)

提前致谢…

解决方法:

找到解决方案:
1.传递ParentViewController而不是当前的视图控制器(this)

public partial class MyViewController : GenericViewController //inherits from UIViewController 
{

  .....
 public async override void ViewDidLoad()
 {
        try
        {

            base.ViewDidLoad();
            //other irrelevant code here
            throw new Exception("Something went wrong");
        }
        catch (Exception ex)
        {
            int actionCode = await AlertViewControllerHelper.ShowAlertDialogAsync(ParentViewController, AlertViewControllerHelper.ERRORDESCRIPTION);

            if (actionCode == AlertViewControllerHelper.INFOACTIONCODE)
            {
                await AlertViewControllerHelper.ShowAlertDialogAsync(ParentViewController, string.Format("{0} : {1}", ex.Message, ex.StackTrace), actionCode);
            }
        }   
 }  
  ........
}

>然后,Helper方法将像这样实现:

public static Task<int> ShowAlertDialogAsync(UIViewController parent, string stackTrace, int actionCode = 0)
    {
        bool isDebug = false;

// #if DEBUG
        isDebug = true;
//#endif

       var taskCompletionSource = new TaskCompletionSource<int>();

        var alert = UIAlertController.Create(ERROR, stackTrace, UIAlertControllerStyle.Alert);
        if (alert.PopoverPresentationController != null)
        {
            alert.PopoverPresentationController.SourceView = parent.View;
            alert.PopoverPresentationController.SourceRect = parent.View.Bounds;
        }

        alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default,
            a => taskCompletionSource.SetResult(0)));
        if (isDebug && actionCode == OKACTIONCODE)
        {
            alert.AddAction(UIAlertAction.Create("Info", UIAlertActionStyle.Default,
                a => taskCompletionSource.SetResult(1)));
        }

        parent.PresentViewController(alert, true, null);

        return taskCompletionSource.Task;
    }
上一篇:c#-使用MonoTouch创建自定义图像滤镜


下一篇:android-Xamarin.Mobile:标记为过时的基于任务的API