using System; using System.Collections.Generic; using System.Linq; using System.Text; using UIKit; using Foundation; using Shared.IO; using CoreGraphics; namespace Shared { /// /// EditTextView 文本输入框 /// 支持换行 /// public class EditTextView : View { public Action FoucsChanged; /// /// 当前视图 /// /// The ios user interface text view. MyEditTextView iosUITextView { get { return uiView as MyEditTextView; } 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); iosUITextView.placeholderUILabel.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 true; } set { //iosUITextView.Enabled = value; } } string _placeholderText = " "; /// /// 显示提示信息 /// /// The placeholder. public string PlaceholderText { get { return _placeholderText; } set { //iosUITextView.Placeholder = value; _placeholderText = value; iosUITextView.placeholderUILabel.Text = _placeholderText; } } 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); iosUITextView.placeholderUILabel.TextColor = _placeholderTextUIColor; } } /// /// 是否用*号隐藏字符 /// /// The secure text entry. public bool SecureTextEntry { get { return iosUITextView.SecureTextEntry; } set { iosUITextView.SecureTextEntry = value; } } public static EditTextView Instance; /// /// 构造函数 /// public EditTextView() { iosUITextView = new MyEditTextView(this) { }; this.TextSize = Application.FontSize; } /// /// 创新需要创新的信息 /// 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) { 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 { 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); } } } /// /// 选择时背景颜色 /// /// 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(); } } } /// /// 刷新placeholderUILabel布局 /// public void InitIosPlaceholderUILabelWithHeight(int mHeight) { var MFrame = iosUITextView.placeholderUILabel.Frame; MFrame.X = 5; MFrame.Y = 0; MFrame.Height = mHeight; MFrame.Width = iosUITextView.Frame.Size.Width - 20; iosUITextView.placeholderUILabel.Frame = MFrame; } /// /// 隐藏软键盘 /// public void HideSoftInput() { Foucs = false; } public Action KeyEventAction; class MyEditTextView : UIKit.UITextView, IUITextViewDelegate { public UILabel placeholderUILabel; [Weak] EditTextView EditTextView; public MyEditTextView(EditTextView EditTextView) { this.EditTextView = EditTextView; TextColor = UIColor.White; placeholderUILabel = new UILabel(new CGRect(5, 0, this.Frame.Size.Width - 20, 40)); placeholderUILabel.Lines = 0; placeholderUILabel.TextColor = UIColor.Gray; this.AddSubview(placeholderUILabel); this.Delegate = this; EditorEnterAction += () => { this.EditTextView?.EditorEnterAction?.Invoke(this.EditTextView); }; //EditingChanged += (sender, e) => //{ // this.EditTextView?.TextChangeEventHandler?.Invoke(this.EditTextView, Text); //}; //EditingDidBegin += (sender, e) => //{ // Instance = this.EditTextView; // this.EditTextView?.FoucsChanged?.Invoke(this.EditTextView, new FocusEventArgs { Focus = true }); //}; //EditingDidEnd += (sender, e) => //{ // this.EditTextView?.FoucsChanged?.Invoke(this.EditTextView, new FocusEventArgs { Focus = false }); //}; } //public void InitPlaceholderUILabelWithHeight(int mHeight) { // var MFrame = placeholderUILabel.Frame; // MFrame.Height = mHeight; // MFrame.Width = this.Frame.Size.Width - 20; // placeholderUILabel.Frame = MFrame; //} public override void MovedToSuperview() { base.MovedToSuperview(); if (Superview == null) { System.Console.WriteLine("从父控件中移除"); } else { System.Console.WriteLine("添加到父控件"); } } public override void DeleteBackward() { base.DeleteBackward(); EditTextView?.KeyEventAction?.Invoke(EditTextView, "Del"); } internal System.Action EditorEnterAction; [Export("textViewDidChange:")] public new void Changed(UITextView textView) { this.EditTextView?.TextChangeEventHandler?.Invoke(this.EditTextView, Text); //取消按钮点击权限,并显示文字 if (textView.Text.Length == 0) { placeholderUILabel.Hidden = false; } else { placeholderUILabel.Hidden = true; } } [Export("textViewDidBeginEditing:")] public void EditingStarted(UITextView textView) { Instance = this.EditTextView; this.EditTextView?.FoucsChanged?.Invoke(this.EditTextView, new FocusEventArgs { Focus = true }); } [Export("textViewDidEndEditing:")] public void EditingEnded(UITextView textView) { this.EditTextView?.FoucsChanged?.Invoke(this.EditTextView, new FocusEventArgs { Focus = false }); } nfloat x; /// /// 点击开始 /// /// Touches. /// Evt. public override void TouchesBegan(NSSet touches, UIEvent evt) { EditTextView?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this)); } /// /// 移动 /// /// Touches. /// Evt. public override void TouchesMoved(NSSet touches, UIEvent evt) { EditTextView?.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this)); } /// /// 点击弹起 /// /// Touches. /// Evt. public override void TouchesEnded(NSSet touches, UIEvent evt) { EditTextView?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this)); } public override void TouchesCancelled(NSSet touches, UIEvent evt) { EditTextView?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this)); } } } //public class FocusEventArgs : EventArgs //{ // /// // /// true 为获取到焦点 // /// false 焦点消失 // /// // public bool Focus; //} // -(void) textViewDidChange:(UITextView*) textView // { // self.descLab.hidden = YES; // self.sendBtn.userInteractionEnabled = YES; // self.sendBtn.backgroundColor = MainColor; // //实时显示字数 // self.stringlenghtLab.text = [NSString stringWithFormat:@"%ld/100",(long)textView.text.length]; // //字数限制 // if (textView.text.length >= 100) { // textView.text = [textView.text substringToIndex: 100]; // } // //取消按钮点击权限,并显示文字 // if (textView.text.length == 0) { // self.descLab.hidden = NO; // self.sendBtn.userInteractionEnabled = NO; // self.sendBtn.backgroundColor = [UIColor lightGrayColor]; // } // } //-(BOOL) textView:(UITextView*) textView shouldChangeTextInRange:(NSRange) range replacementText:(NSString*) text // { // if ([text isEqualToString:@"\n"]) { // [self.FKTextView resignFirstResponder]; // return NO; // } // return YES; //} }