using UIKit;
using Foundation;
using Shared.IO;
using System;
using CoreGraphics;
namespace Shared
{
///
/// Button 按键
///
public class Button : View
{
MyButton iosButton
{
get
{
return uiView as MyButton;
}
set
{
uiView = value;
}
}
///
/// Initializes a new instance of the class.
///
public Button()
{
iosButton = new MyButton(this) { };
iosButton.TitleLabel.Font = UIFont.FromName(FontName, Application.FontSize);
}
byte[] imageBytes;
public byte[] ImageBytes {
get {
return imageBytes;
}
set {
imageBytes = value;
IsSelected = isSelected;
}
}
int textID;
///
/// 根据ID获取对应的备注
///
/// The text I.
public int TextID
{
get
{
return textID;
}
set
{
textID = value;
Text = Language.StringByID(TextID);
}
}
///
/// 文本
///
/// The text.
public string Text
{
get
{
return iosButton.Title(UIKit.UIControlState.Normal);
}
set
{
iosButton.SetTitle(value, UIKit.UIControlState.Normal);
}
}
///
/// 字体名称
///
/// The name of the font.
public string FontName{
get{
return iosButton.TitleLabel.Font.Name;
}
set{
iosButton.TitleLabel.Font = UIFont.FromName(value, iosButton.Font.PointSize);
}
}
public bool IsMoreLines {
get {
return iosButton.TitleLabel.Lines != 1 ? true : false;
}
set {
//IsMoreLines = value;
iosButton.TitleLabel.Lines = value ? 0 : 1;
}
}
///
/// 是否显示粗体
///
bool isBold;
public bool IsBold
{
get
{
return isBold;
}
set
{
isBold = value;
if (isBold)
{
iosButton.TitleLabel.Font = UIFont.FromName("Helvetica-Bold", mTextSize);
}
else
{
iosButton.TitleLabel.Font = UIFont.FromName("Helvetica", mTextSize);
}
}
}
///
/// 获取字体长度
///
public int GetTextWidth()
{
int textWidth = 0;
CGSize fontSize = this.Text.StringSize(iosButton.TitleLabel.Font);
textWidth = (int)fontSize.Width;
return textWidth;
}
///
/// 创新需要创新的信息
///
public override void Refresh()
{
base.Refresh();
IsSelected = isSelected;
}
float mTextSize = Application.FontSize;
///
/// 文字大小,默认12
///
/// The size of the text.
public float TextSize
{
get
{
return (float)iosButton.TitleLabel.Font.PointSize;
}
set
{
mTextSize = value;
iosButton.TitleLabel.Font = UIFont.FromName(FontName, value);
}
}
uint textColor=0xFFFFFFFF;
///
/// 文字颜色
///
/// The color of the text.
public uint TextColor
{
get
{
return textColor;
}
set
{
textColor = value;
if (IsSelected)
{
return;
}
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);
iosButton.SetTitleColor(UIKit.UIColor.FromRGBA(r, g, b, a), UIControlState.Normal);
}
}
uint selecteTextColor = 0xFFFFFFFF;
///
/// 文字颜色
///
/// The color of the text.
public uint SelectedTextColor
{
get
{
return selecteTextColor;
}
set
{
selecteTextColor = value;
if (!IsSelected)
{
return;
}
byte r, g, b, a;
r = (byte)(selecteTextColor / 256 / 256 % 256);
g = (byte)(selecteTextColor / 256 % 256);
b = (byte)(selecteTextColor % 256);
a = (byte)(selecteTextColor / 256 / 256 / 256 % 256);
iosButton.SetTitleColor(UIKit.UIColor.FromRGBA(r, g, b, a), UIControlState.Normal);
}
}
bool isSelected;
///
/// 选中状态
///
/// true if this instance is selected; otherwise, false.
public bool IsSelected
{
get
{
return isSelected;
}
set
{
try
{
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);
iosButton.BackgroundColor = UIKit.UIColor.FromRGBA(r, g, b, a);
}
else
{
iosButton.SetBackgroundImage(UIImage.FromFile(FileUtils.GetImageFilePath(SelectedImagePath)), UIControlState.Normal);
}
SelectedTextColor = selecteTextColor;
}
else
{
if (imageBytes != null)
{
iosButton.SetBackgroundImage(UIImage.LoadFromData(NSData.FromArray(imageBytes)), UIControlState.Normal);
return;
}
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);
iosButton.BackgroundColor = UIKit.UIColor.FromRGBA(r, g, b, a);
}
else
{
iosButton.SetBackgroundImage(UIImage.LoadFromData(NSData.FromFile(FileUtils.GetImageFilePath(UnSelectedImagePath))), UIControlState.Normal);
}
TextColor = textColor;
}
}
catch
{
}
}
}
TextAlignment textAlignment = TextAlignment.Center;
///
/// 文字对齐方式
///
/// Horizontal alignment.
/// Vertical alignment.
public TextAlignment TextAlignment
{
get
{
return textAlignment;
}
set
{
textAlignment = value;
switch (value)
{
case TextAlignment.TopLeft:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Left;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Top;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Left;
break;
case TextAlignment.TopCenter:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Center;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Top;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Center;
break;
case TextAlignment.TopRight:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Right;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Top;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Right;
break;
case TextAlignment.CenterLeft:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Left;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Center;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Left;
break;
case TextAlignment.Center:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Center;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Center;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Center;
break;
case TextAlignment.CenterRight:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Right;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Center;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Right;
break;
case TextAlignment.BottomLeft:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Left;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Bottom;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Left;
break;
case TextAlignment.BottomCenter:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Center;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Bottom;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Center;
break;
case TextAlignment.BottomRight:
iosButton.TitleLabel.TextAlignment = UITextAlignment.Right;
iosButton.VerticalAlignment = UIKit.UIControlContentVerticalAlignment.Bottom;
iosButton.HorizontalAlignment = UIKit.UIControlContentHorizontalAlignment.Right;
break;
}
}
}
string selectedImagePath;
///
/// 选择时背景图路径
///
/// The selected image path.
public string SelectedImagePath
{
get
{
return selectedImagePath;
}
set
{
selectedImagePath = value;
IsSelected = IsSelected;
}
}
string unSelectedImagePath;
///
/// 非选中状态的背景图路径
///
/// The un selected image path.
public string UnSelectedImagePath
{
get
{
return unSelectedImagePath;
}
set
{
unSelectedImagePath = value;
IsSelected = IsSelected;
}
}
///
/// 内边距
///
/// The padding.
public override Padding Padding
{
get
{
return new Padding((int)iosButton.ContentEdgeInsets.Top, (int)iosButton.ContentEdgeInsets.Left, (int)iosButton.ContentEdgeInsets.Bottom, (int)iosButton.ContentEdgeInsets.Right);
}
set
{
iosButton.ContentEdgeInsets = new UIEdgeInsets(value.Top, value.Left, value.Bottom, value.Right);
}
}
///
/// 是否使用点击
///
/// true if enable; otherwise, false.
public override bool Enable
{
get
{
return iosButton.Enabled;
}
set
{
iosButton.Enabled = value;
}
}
///
/// 选择时背景颜色
///
/// The color of the text.
public uint SelectedBackgroundColor
{
get;
set;
}
class MyButton : UIKit.UIButton
{
[Weak] View view;
public MyButton(View view)
{
this.view = view;
ContentEdgeInsets = new UIEdgeInsets(3, 3, 3, 3);
TitleLabel.LineBreakMode = UILineBreakMode.TailTruncation;
}
///
/// 点击开始
///
/// Touches.
/// Evt.
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
view?.TouchEvent(EventActions.Down,(touches.AnyObject as UITouch).LocationInView(this));
}
///
/// 移动
///
/// Touches.
/// Evt.
public override void TouchesMoved(NSSet touches, UIEvent evt)
{
view?.TouchEvent(EventActions.Move,(touches.AnyObject as UITouch).LocationInView(this));
}
///
/// 点击弹起
///
/// Touches.
/// Evt.
public override void TouchesEnded(NSSet touches, UIEvent evt)
{
view?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this));
}
public override void TouchesCancelled(NSSet touches, UIEvent evt)
{
view?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this));
}
public override UILineBreakMode LineBreakMode { get => base.LineBreakMode; set => base.LineBreakMode = value; }
public override UILabel TitleLabel => base.TitleLabel;
//int isMoreLines
}
}
}