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;
if (value)
{
SetTextContentType();
}
}
}
///
/// 解决iOS12 以上默认提示自动生成强密码
///
public void SetTextContentType()
{
if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
{
iosUITextView.SetTextContentType(UITextContentType.Password);
}
}
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)
{
Shared.HDLUtils.WriteLine("从父控件中移除");
}
else {
Shared.HDLUtils.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;
//}
}