using System; using System.Collections.Generic; using System.Linq; using System.Text; using UIKit; using Foundation; using Shared.IO; using CoreGraphics; namespace Shared { /// /// 文本输入框 /// public class EditText : View { public Action FoucsChanged; /// /// 当前视图 /// /// The ios user interface text view. MyEditText iosUITextView { get { return uiView as MyEditText; } set { uiView = value; } } //一端口进入配置模式 1提示不要接入设备 2获取设备列表 3接入设备 4追加设备 /// /// 文字大小 /// /// The size of the text. public float TextSize { get { return (float)iosUITextView.Font.PointSize; } set { iosUITextView.Font = UIFont.SystemFontOfSize(value);// .SetTextSize (ComplexUnitType.Sp, value); } } /// /// 是否设置为加载时显示输入键盘 /// /// true if is first responder; otherwise, false. public bool IsFirstResponder { get { return iosUITextView.IsFirstResponder; } set { if (value) { iosUITextView.BecomeFirstResponder(); } else { iosUITextView.ResignFirstResponder(); } } } int textID; /// /// 根据ID获取对应的备注 /// /// The text I. public int TextID { get { return textID; } set { textID = value; Text = Language.StringByID(TextID); } } /// /// 是否使能 /// /// 是否使能 public override bool Enable { get { return iosUITextView.Enabled; } set { iosUITextView.Enabled = value; } } string _placeholderText = " "; /// /// 显示提示信息 /// /// The placeholder. public string PlaceholderText { get { return iosUITextView.Placeholder; } set { //iosUITextView.Placeholder = value; _placeholderText = value; setPlaceholderTextAndColor(); } } UIColor _placeholderTextUIColor; uint placeholderTextColor; /// /// Gets or sets the color of the placeholder text. /// /// The color of the placeholder text. public uint PlaceholderTextColor { get { return placeholderTextColor; } set { placeholderTextColor = value; byte r, g, b, a; r = (byte)(placeholderTextColor / 256 / 256 % 256); g = (byte)(placeholderTextColor / 256 % 256); b = (byte)(placeholderTextColor % 256); a = (byte)(placeholderTextColor / 256 / 256 / 256 % 256); //iosUITextView.SetValueForKeyPath(UIColor.FromRGBA(r, g, b, a), new NSString("_placeholderLabel.textColor")); _placeholderTextUIColor = UIColor.FromRGBA(r, g, b, a); setPlaceholderTextAndColor(); } } /// /// 通过attributedPlaceholder属性修改Placeholder颜色 /// private void setPlaceholderTextAndColor() { //2019-09-23 适配iOS13 var normalAttributedTitle = new NSAttributedString(_placeholderText, foregroundColor: _placeholderTextUIColor); iosUITextView.AttributedPlaceholder = normalAttributedTitle; } /// /// 是否用*号隐藏字符 /// /// The secure text entry. public bool SecureTextEntry { get { return iosUITextView.SecureTextEntry; } set { iosUITextView.SecureTextEntry = value; // if (value) // { // ResetTextContentType(); // } } } /// /// 暂时解决iOS13 以上默认提示自动生成强密码,不是最优方案 /// public void ResetTextContentType() { if (UIDevice.CurrentDevice.CheckSystemVersion(12, 0)) { iosUITextView.SetTextContentType(UITextContentType.Password); //HDLUtils.WriteLine(" GetTextContentType: " + iosUITextView.GetTextContentType().ToString()); //if (iosUITextView.GetTextContentType() == UITextContentType.NewPassword) //{ // iosUITextView.SetTextContentType(UITextContentType.Password); //} } } bool isNumberKeyboardType = false; //设置键盘类型 public bool IsNumberKeyboardType { get { return isNumberKeyboardType; } set { isNumberKeyboardType = value; if (value) { iosUITextView.KeyboardType = UIKeyboardType.NumberPad; } else { iosUITextView.KeyboardType = UIKeyboardType.Default; } } } public static EditText Instance; /// /// 构造函数 /// public EditText() { iosUITextView = new MyEditText(this) { }; ResetTextContentType(); } /// /// 创新需要创新的信息 /// public override void Refresh() { base.Refresh(); IsSelected = isSelected; } /// /// 文本 /// /// The text. public string Text { get { return iosUITextView.Text; } set { iosUITextView.Text = value; TextChangeEventHandler?.Invoke(this, value);//赋值,增加触发事件 } } uint textColor; /// /// 文字颜色 /// /// The color of the text. public uint TextColor { get { return textColor; } set { textColor = value; byte r, g, b, a; r = (byte)(textColor / 256 / 256 % 256); g = (byte)(textColor / 256 % 256); b = (byte)(textColor % 256); a = (byte)(textColor / 256 / 256 / 256 % 256); iosUITextView.TextColor = UIKit.UIColor.FromRGBA(r, g, b, a); } } bool isSelected; /// /// Gets or sets a value indicating whether this instance is selected. /// /// true if this instance is selected; otherwise, false. public bool IsSelected { get { return isSelected; } set { isSelected = value; if (!IsCanRefresh) { return; } if (isSelected) { if (null == SelectedImagePath) { byte r, g, b, a; r = (byte)(SelectedBackgroundColor / 256 / 256 % 256); g = (byte)(SelectedBackgroundColor / 256 % 256); b = (byte)(SelectedBackgroundColor % 256); a = (byte)(SelectedBackgroundColor / 256 / 256 / 256 % 256); iosUITextView.BackgroundColor = UIKit.UIColor.FromRGBA(r, g, b, a); } else { iosUITextView.Background = UIImage.FromFile(FileUtils.GetImageFilePath(SelectedImagePath)); } } else { if (null == UnSelectedImagePath) { byte r, g, b, a; r = (byte)(BackgroundColor / 256 / 256 % 256); g = (byte)(BackgroundColor / 256 % 256); b = (byte)(BackgroundColor % 256); a = (byte)(BackgroundColor / 256 / 256 / 256 % 256); iosUITextView.BackgroundColor = UIKit.UIColor.FromRGBA(r, g, b, a); } else { iosUITextView.Background = UIImage.FromFile(FileUtils.GetImageFilePath(UnSelectedImagePath)); } } } } /// /// 选择时背景颜色 /// /// The color of the text. public uint SelectedBackgroundColor { get; set; } TextAlignment textAlignment = TextAlignment.Center; /// /// Texts the alignment. /// public TextAlignment TextAlignment { get { return textAlignment; } set { textAlignment = value; switch (value) { case TextAlignment.TopLeft: //iosUITextView.TextAlignment = UITextAlignment.Left; break; case TextAlignment.TopCenter: //iosUITextView.TextAlignment = UITextAlignment.Center| UITextAlignment.Left; break; case TextAlignment.TopRight: // iosUITextView.TextAlignment = UITextAlignment.Right; break; case TextAlignment.CenterLeft: iosUITextView.TextAlignment = UITextAlignment.Left; break; case TextAlignment.Center: iosUITextView.TextAlignment = UITextAlignment.Center; break; case TextAlignment.CenterRight: iosUITextView.TextAlignment = UITextAlignment.Right; break; case TextAlignment.BottomLeft: // iosUITextView.TextAlignment = UIKit.UIControlContentVerticalAlignment.Bottom; // iosUITextView.TextAlignment = UIKit.UIControlContentHorizontalAlignment.Left; break; case TextAlignment.BottomCenter: // iosUITextView.TextAlignment = UIKit.UIControlContentVerticalAlignment.Bottom; // iosUITextView.TextAlignment = UIKit.UIControlContentHorizontalAlignment.Center; break; case TextAlignment.BottomRight: // iosUITextView.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Bottom; // iosUITextView.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Right; break; } } } /// /// 选择时背景图路径 /// /// The selected image path. public string SelectedImagePath { get; set; } /// /// 非选中状态的背景图路径 /// /// The un selected image path. public string UnSelectedImagePath { get; set; } /// /// 输入文字变化事件 /// public Action TextChangeEventHandler; /// /// 按了返回按键事件 /// public Action EditorEnterAction; /// /// 设置焦点 /// public bool Foucs { get { return iosUITextView.IsFirstResponder; } set { if (value) { //显示键盘 iosUITextView.BecomeFirstResponder(); } else { //隐藏键盘 iosUITextView.ResignFirstResponder(); } } } public Action KeyEventAction; class MyEditText : UIKit.UITextField, IUITextFieldDelegate { [Weak] EditText editText; public MyEditText(EditText editText) { this.editText = editText; TextColor = UIColor.White; this.Delegate = this; EditorEnterAction += () => { this.editText?.EditorEnterAction?.Invoke(this.editText); }; EditingChanged += (sender, e) => { this.editText?.TextChangeEventHandler?.Invoke(this.editText, Text); }; EditingDidBegin += (sender, e) => { Instance = this.editText; this.editText?.FoucsChanged?.Invoke(this.editText, new FocusEventArgs { Focus = true }); }; EditingDidEnd += (sender, e) => { this.editText?.FoucsChanged?.Invoke(this.editText, new FocusEventArgs { Focus = false }); }; } public override void MovedToSuperview() { base.MovedToSuperview(); if (Superview == null) { Shared.HDLUtils.WriteLine("从父控件中移除"); } else { Shared.HDLUtils.WriteLine("添加到父控件"); } } public override void DeleteBackward() { base.DeleteBackward(); editText?.KeyEventAction?.Invoke(editText, "Del"); } internal System.Action EditorEnterAction; [Export("textFieldShouldReturn:")] public new bool ShouldReturn(UITextField textField) { ResignFirstResponder(); EditorEnterAction?.Invoke(); return true; } nfloat x; /// /// 点击开始 /// /// Touches. /// Evt. public override void TouchesBegan(NSSet touches, UIEvent evt) { editText?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this)); } /// /// 移动 /// /// Touches. /// Evt. public override void TouchesMoved(NSSet touches, UIEvent evt) { editText?.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this)); } /// /// 点击弹起 /// /// Touches. /// Evt. public override void TouchesEnded(NSSet touches, UIEvent evt) { editText?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this)); } public override void TouchesCancelled(NSSet touches, UIEvent evt) { editText?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this)); } } } public class FocusEventArgs : EventArgs { /// /// true 为获取到焦点 /// false 焦点消失 /// public bool Focus; } }