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;
}
}