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中内置,我不想使用它。
我在等待过程中没有问题,但这根本行不通。有人可以帮忙吗?
谢谢!
答案 0 :(得分:1)
您可以只使用ACR UserDialogs库: https://github.com/aritchie/userdialogs
答案 1 :(得分:0)
这是我几年前提供的解决方案,与您的优雅方法相比,我认为这是一个丑陋的技巧。您没有说哪个部分不能正常工作,这可能有助于发现问题。
这是几年前我的解决方案: