在UIAlertView (iOS, Xamarin)上添加UITextView而不使用任何第三方库



我想在iOS中显示一个对话框,并将UITextView添加到对话框的视图中。UITextView textView具有可点击的电子邮件,电话和url链接的文本。我能够触发对话框,但只有标题和ok按钮。对话框视图中没有添加textview。我不确定这里的问题是与textview还是与视图被添加到对话框的方式。

请检查下面我的代码:

 UITextView textView = new UITextView();
 textView.Editable = false;
 textView.DataDetectorTypes = UIDataDetectorType.All;
 textView.Message = message;
 var dlg = UIAlertController.Create(Title ?? String.Empty, null, UIAlertControllerStyle.Alert);
 dlg.View.AddSubview(textView);
 dlg.AddAction(UIAlertAction.Create(OkText, UIAlertActionStyle.Default, action => Submit()));                
 var top = Utils.GetTopViewController();
 top.PresentViewController(dlg, animated: true, completionHandler: null);

谢谢,

似乎你需要一个自定义弹出视图来完成你所需要的,我为你写了一个样本,这是代码:

这是ViewController.cs:

public partial class ViewController : UIViewController
{
    public ViewController (IntPtr handle) : base (handle)
    {
    }
    public override void ViewDidLoad ()
    {
        this.View.BackgroundColor = UIColor.Gray;
        this.View.AddGestureRecognizer (new UITapGestureRecognizer (() => {
            CustomPopUpView cpuv = new CustomPopUpView (new CoreGraphics.CGSize (300, 200));
            cpuv.PopUp (true,delegate{
                Console.WriteLine("cpuv will close");
            });
        }));
    }
}

这是custompopupview。cs:

public class CustomPopUpView : UIView
{
    public delegate void PopWillCloseHandler ();
    public event PopWillCloseHandler PopWillClose;
    private UIVisualEffectView effectView = new UIVisualEffectView (UIBlurEffect.FromStyle (UIBlurEffectStyle.Dark));
    private UIButton btnClose = new UIButton (UIButtonType.System);
    public CustomPopUpView (CGSize size)
    {
        nfloat lx = (UIScreen.MainScreen.Bounds.Width - size.Width) / 2;
        nfloat ly = (UIScreen.MainScreen.Bounds.Height - size.Height) / 2;
        this.Frame = new CGRect (new CGPoint (lx, ly), size);
        effectView.Alpha = 0;
        this.BackgroundColor = UIColor.White;
        nfloat btnHeight = 40;
        btnClose.SetTitle ("Close", UIControlState.Normal);
        btnClose.Frame = new CGRect (0, this.Frame.Height - btnHeight, this.Frame.Width, btnHeight);
        btnClose.TouchUpInside += delegate {
            Close();
        };
        this.AddSubview (btnClose);
    }
    public void PopUp (bool animated = true, Action popAnimationFinish = null)
    {
        UIWindow window = UIApplication.SharedApplication.KeyWindow;
        effectView.Frame = window.Bounds;
        window.EndEditing (true);
        window.AddSubview (effectView);
        window.AddSubview (this);
        if (animated) {
            Transform = CGAffineTransform.MakeScale (0.1f, 0.1f);
            UIView.Animate (0.15, delegate {
                Transform = CGAffineTransform.MakeScale (1, 1);
                effectView.Alpha = 0.8f;
            },delegate {
                if(null != popAnimationFinish)
                    popAnimationFinish ();
            });
        } else {
            effectView.Alpha = 0.8f;
        }
    }
    public void Close (bool animated = true)
    {
        if (animated) {
            UIView.Animate (0.15, delegate {
                Transform = CGAffineTransform.MakeScale (0.1f, 0.1f);
                effectView.Alpha = 0;
            }, delegate {
                this.RemoveFromSuperview();
                effectView.RemoveFromSuperview();
                if(null != PopWillClose) PopWillClose ();
            });
        } else {
            if(null != PopWillClose) PopWillClose ();
        }
    }
}

你可以给这个CustomPopUpView添加任何你想要的东西,或者你可以继承它并创建你自己的弹出窗口。

希望对你有帮助

这是如何在UIAlertViewController中添加UITextField

  var alert = UIAlertController.Create(Enter OTP, "", UIAlertControllerStyle.Alert);
            alert.AddTextField((obj) =>
            {
                obj.Font = UIFont.SystemFontOfSize(20);
                obj.TextAlignment = UITextAlignment.Center;
                obj.Placeholder = "OTP";
            });
            alert.AddAction(UIAlertAction.Create("Submit", UIAlertActionStyle.Default, (obj) => 
            {
                chargeReference = reference;
                statusValue = alert.TextFields[0].Text;
                CompleteFunding();
            }));
            PresentViewController(alert, true, null);

希望对大家有所帮助

相关内容

最新更新