|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using UIKit;
|
using Foundation;
|
using Shared.IO;
|
using CoreGraphics;
|
|
namespace Shared
|
{
|
/// <summary>
|
/// 文本输入框
|
/// </summary>
|
public class EditText : View
|
{
|
public Action<View, FocusEventArgs> FoucsChanged;
|
/// <summary>
|
/// 当前视图
|
/// </summary>
|
/// <value>The ios user interface text view.</value>
|
MyEditText iosUITextView
|
{
|
get
|
{
|
return uiView as MyEditText;
|
}
|
set
|
{
|
uiView = value;
|
}
|
}
|
|
//一端口进入配置模式 1提示不要接入设备 2获取设备列表 3接入设备 4追加设备
|
/// <summary>
|
/// 文字大小
|
/// </summary>
|
/// <value>The size of the text.</value>
|
public float TextSize
|
{
|
get
|
{
|
return (float)iosUITextView.Font.PointSize;
|
}
|
set
|
{
|
iosUITextView.Font = UIFont.SystemFontOfSize(value);// .SetTextSize (ComplexUnitType.Sp, value);
|
}
|
}
|
|
/// <summary>
|
/// 是否设置为加载时显示输入键盘
|
/// </summary>
|
/// <value><c>true</c> if is first responder; otherwise, <c>false</c>.</value>
|
public bool IsFirstResponder
|
{
|
get
|
{
|
return iosUITextView.IsFirstResponder;
|
}
|
set
|
{
|
if (value)
|
{
|
iosUITextView.BecomeFirstResponder();
|
}
|
else
|
{
|
iosUITextView.ResignFirstResponder();
|
}
|
}
|
}
|
|
int textID;
|
/// <summary>
|
/// 根据ID获取对应的备注
|
/// </summary>
|
/// <value>The text I.</value>
|
public int TextID
|
{
|
get
|
{
|
return textID;
|
}
|
set
|
{
|
textID = value;
|
Text = Language.StringByID(TextID);
|
}
|
}
|
|
/// <summary>
|
/// 是否使能
|
/// </summary>
|
/// <value>是否使能</value>
|
public override bool Enable
|
{
|
get
|
{
|
return iosUITextView.Enabled;
|
}
|
set
|
{
|
iosUITextView.Enabled = value;
|
}
|
}
|
|
|
string _placeholderText = " ";
|
/// <summary>
|
/// 显示提示信息
|
/// </summary>
|
/// <value>The placeholder.</value>
|
public string PlaceholderText
|
{
|
get
|
{
|
return iosUITextView.Placeholder;
|
}
|
set
|
{
|
//iosUITextView.Placeholder = value;
|
|
_placeholderText = value;
|
|
setPlaceholderTextAndColor();
|
|
}
|
}
|
|
|
UIColor _placeholderTextUIColor;
|
uint placeholderTextColor;
|
/// <summary>
|
/// Gets or sets the color of the placeholder text.
|
/// </summary>
|
/// <value>The color of the placeholder text.</value>
|
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();
|
}
|
}
|
|
/// <summary>
|
/// 通过attributedPlaceholder属性修改Placeholder颜色
|
/// </summary>
|
private void setPlaceholderTextAndColor() {
|
//2019-09-23 适配iOS13
|
var normalAttributedTitle = new NSAttributedString(_placeholderText, foregroundColor: _placeholderTextUIColor);
|
iosUITextView.AttributedPlaceholder = normalAttributedTitle;
|
}
|
|
/// <summary>
|
/// 是否用*号隐藏字符
|
/// </summary>
|
/// <value>The secure text entry.</value>
|
public bool SecureTextEntry
|
{
|
get
|
{
|
return iosUITextView.SecureTextEntry;
|
}
|
set
|
{
|
iosUITextView.SecureTextEntry = value;
|
}
|
}
|
public static EditText Instance;
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public EditText()
|
{
|
iosUITextView = new MyEditText(this) { };
|
}
|
|
/// <summary>
|
/// 创新需要创新的信息
|
/// </summary>
|
public override void Refresh()
|
{
|
base.Refresh();
|
IsSelected = isSelected;
|
}
|
|
|
/// <summary>
|
/// 文本
|
/// </summary>
|
/// <value>The text.</value>
|
public string Text
|
{
|
get
|
{
|
return iosUITextView.Text;
|
}
|
set
|
{
|
|
iosUITextView.Text = value;
|
TextChangeEventHandler?.Invoke(this, value);//赋值,增加触发事件
|
}
|
}
|
|
uint textColor;
|
/// <summary>
|
/// 文字颜色
|
/// </summary>
|
/// <value>The color of the text.</value>
|
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;
|
/// <summary>
|
/// Gets or sets a value indicating whether this instance is selected.
|
/// </summary>
|
/// <value><c>true</c> if this instance is selected; otherwise, <c>false</c>.</value>
|
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));
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 选择时背景颜色
|
/// </summary>
|
/// <value>The color of the text.</value>
|
public uint SelectedBackgroundColor
|
{
|
get;
|
set;
|
}
|
|
|
TextAlignment textAlignment = TextAlignment.Center;
|
|
/// <summary>
|
/// Texts the alignment.
|
/// </summary>
|
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;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 选择时背景图路径
|
/// </summary>
|
/// <value>The selected image path.</value>
|
public string SelectedImagePath { get; set; }
|
|
/// <summary>
|
/// 非选中状态的背景图路径
|
/// </summary>
|
/// <value>The un selected image path.</value>
|
public string UnSelectedImagePath { get; set; }
|
|
|
/// <summary>
|
/// 输入文字变化事件
|
/// </summary>
|
public Action<View, string> TextChangeEventHandler;
|
|
/// <summary>
|
/// 按了返回按键事件
|
/// </summary>
|
public Action<View> EditorEnterAction;
|
/// <summary>
|
/// 设置焦点
|
/// </summary>
|
public bool Foucs
|
{
|
get
|
{
|
return iosUITextView.IsFirstResponder;
|
}
|
set
|
{
|
if (value)
|
{
|
//显示键盘
|
iosUITextView.BecomeFirstResponder();
|
}
|
else {
|
//隐藏键盘
|
iosUITextView.ResignFirstResponder();
|
}
|
}
|
}
|
|
public Action<View, string> 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)
|
{
|
System.Console.WriteLine("从父控件中移除");
|
}
|
else {
|
System.Console.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;
|
|
/// <summary>
|
/// 点击开始
|
/// </summary>
|
/// <param name="touches">Touches.</param>
|
/// <param name="evt">Evt.</param>
|
public override void TouchesBegan(NSSet touches, UIEvent evt)
|
{
|
editText?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this));
|
}
|
/// <summary>
|
/// 移动
|
/// </summary>
|
/// <param name="touches">Touches.</param>
|
/// <param name="evt">Evt.</param>
|
public override void TouchesMoved(NSSet touches, UIEvent evt)
|
{
|
editText?.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this));
|
}
|
|
/// <summary>
|
/// 点击弹起
|
/// </summary>
|
/// <param name="touches">Touches.</param>
|
/// <param name="evt">Evt.</param>
|
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
|
{
|
/// <summary>
|
/// true 为获取到焦点
|
/// false 焦点消失
|
/// </summary>
|
public bool Focus;
|
}
|
}
|