迫切需要Xamarin.IOS模态MessageBox,如弹出窗口

时间:2019-01-12 20:08:18

标签: xamarin.ios uipopovercontroller uialertcontroller

Xamarin IOS中的编码。我有一个下拉列表类型弹出窗口,如果最终用户输入新值,我想问一个是/否的问题:是否要添加新行?

该控件位于一个UIStackView内,该UIStack处于一个容器UIView内,该容器又位于另一个通过segue呈现的容器内。 Xamarin要求我实现一个UIPopoverController。这是我到目前为止的代码:

<somegriditem>
  <div>A</div>
  <div>B</div>
</somegriditem>

我按如下方式调用它:

{display:flex;flex-direction:column;}

CurrentViewController的定义如下:

using System.Threading.Tasks;
using Foundation;
using UIKit;

namespace PTPED_Engine
{

    public enum MessagePopupType
    {
        YesNo = 1,
        OKCancel = 2,
        OKOnly = 3
    }

    public enum PopupResultType
    {
        OK = 1,
        Cancel = 2,
        Yes = 3,
        No = 4
    }

    public static class AlertPopups
    {
        static NSObject nsObject;

        public static void Initialize(NSObject nsObject)
        {
            AlertPopups.nsObject = nsObject;
        }
        public static Task<PopupResultType> AskUser(UIViewController parent, UIView V, string strTitle, string strMsg, MessagePopupType mpt)
        {
            using (UIPopoverController pc = new UIPopoverController(parent))
            {
               // pc.ContentViewController
                // method to show an OK/Cancel dialog box and return true for OK, or false for cancel
                var taskCompletionSource = new TaskCompletionSource<PopupResultType>();

                var alert = UIAlertController.Create(strTitle, strMsg, UIAlertControllerStyle.ActionSheet);
                // set up button event handlers
                if (mpt == MessagePopupType.OKCancel)
                {
                    alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, a => taskCompletionSource.SetResult(PopupResultType.OK)));
                    alert.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Default, a => taskCompletionSource.SetResult(PopupResultType.Cancel)));
                }
                if (mpt == MessagePopupType.YesNo)
                {
                    alert.AddAction(UIAlertAction.Create("Yes", UIAlertActionStyle.Default, a => taskCompletionSource.SetResult(PopupResultType.Yes)));
                    alert.AddAction(UIAlertAction.Create("No", UIAlertActionStyle.Default, a => taskCompletionSource.SetResult(PopupResultType.No)));
                }
                if (mpt == MessagePopupType.OKOnly)
                {
                    alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, a => taskCompletionSource.SetResult(PopupResultType.OK)));
                }
                // show it
                nsObject.InvokeOnMainThread(() =>
                {
                    pc.PresentFromRect(V.Bounds, V, UIPopoverArrowDirection.Any, true);
                });

                return taskCompletionSource.Task;
            }
        }
    }
}

这什么都不做。它会挂起用户界面。

这应该是内置的,但只能在Xamarin.Forms中内置,我不想使用它。

我在等待过程中没有问题,但这根本行不通。有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以只使用ACR UserDialogs库: https://github.com/aritchie/userdialogs

答案 1 :(得分:0)

这是我几年前提供的解决方案,与您的优雅方法相比,我认为这是一个丑陋的技巧。您没有说哪个部分不能正常工作,这可能有助于发现问题。

这是几年前我的解决方案:

iphone UIAlertView Modal