using UIKit; using Foundation; using Shared.IO; using System; using CoreGraphics; namespace Shared { /// <summary> /// Button 按键 /// </summary> public class Button : View { MyButton iosButton { get { return uiView as MyButton; } set { uiView = value; } } /// <summary> /// Initializes a new instance of the <see cref="Shared.Button"/> class. /// </summary> 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; /// <summary> /// æ ¹æ®ID获å–对应的备注 /// </summary> /// <value>The text I.</value> public int TextID { get { return textID; } set { textID = value; Text = Language.StringByID(TextID); } } /// <summary> /// 文本 /// </summary> /// <value>The text.</value> public string Text { get { return iosButton.Title(UIKit.UIControlState.Normal); } set { iosButton.SetTitle(value, UIKit.UIControlState.Normal); } } /// <summary> /// å—体åç§° /// </summary> /// <value>The name of the font.</value> 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; } } /// <summary> /// æ˜¯å¦æ˜¾ç¤ºç²—体 /// </summary> 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); } } } /// <summary> /// 获å–å—体长度 /// </summary> public int GetTextWidth() { int textWidth = 0; CGSize fontSize = this.Text.StringSize(iosButton.TitleLabel.Font); textWidth = (int)fontSize.Width; return textWidth; } /// <summary> /// 创新需è¦åˆ›æ–°çš„ä¿¡æ¯ /// </summary> public override void Refresh() { base.Refresh(); IsSelected = isSelected; } float mTextSize = Application.FontSize; /// <summary> /// æ–‡å—大å°,默认12 /// </summary> /// <value>The size of the text.</value> public float TextSize { get { return (float)iosButton.TitleLabel.Font.PointSize; } set { mTextSize = value; iosButton.TitleLabel.Font = UIFont.FromName(FontName, value); } } uint textColor=0xFFFFFFFF; /// <summary> /// æ–‡å—颜色 /// </summary> /// <value>The color of the text.</value> 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; /// <summary> /// æ–‡å—颜色 /// </summary> /// <value>The color of the text.</value> 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; /// <summary> /// 选ä¸çŠ¶æ€ /// </summary> /// <value><c>true</c> if this instance is selected; otherwise, <c>false</c>.</value> 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; /// <summary> /// æ–‡å—坹齿–¹å¼ /// </summary> /// <param name="horizontalAlignment">Horizontal alignment.</param> /// <param name="verticalAlignment">Vertical alignment.</param> 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; /// <summary> /// 选择时背景图路径 /// </summary> /// <value>The selected image path.</value> public string SelectedImagePath { get { return selectedImagePath; } set { selectedImagePath = value; IsSelected = IsSelected; } } string unSelectedImagePath; /// <summary> /// éžé€‰ä¸çжæ€çš„背景图路径 /// </summary> /// <value>The un selected image path.</value> public string UnSelectedImagePath { get { return unSelectedImagePath; } set { unSelectedImagePath = value; IsSelected = IsSelected; } } /// <summary> /// å†…è¾¹è· /// </summary> /// <value>The padding.</value> 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); } } /// <summary> /// 是å¦ä½¿ç”¨ç‚¹å‡» /// </summary> /// <value><c>true</c> if enable; otherwise, <c>false</c>.</value> public override bool Enable { get { return iosButton.Enabled; } set { iosButton.Enabled = value; } } /// <summary> /// 选择时背景颜色 /// </summary> /// <value>The color of the text.</value> 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; } /// <summary> /// 点击开始 /// </summary> /// <param name="touches">Touches.</param> /// <param name="evt">Evt.</param> public override void TouchesBegan(NSSet touches, UIEvent evt) { view?.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) { view?.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) { 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 } } }