Xamarin iOS教程之自定義視圖

Xamarin iOS教程之自定義視圖

Xamarin iOS自定義視圖

工具欄中的視圖在實際應用開發中用的不少,可是爲了吸引用戶的眼球,開發者能夠作出一些自定義的視圖。ide

【示例2-33】如下將實現一個自定義的視圖。當用戶觸摸屏幕時,就會出現一個顯示手指當前位置的標籤視圖,以及改變主視圖的背景顏色。代碼以下:函數

(1建立一個Single View Application類型的工程,命名爲2-13。工具

(2添加一個C#的類文件,並命名爲MyView,具體步驟以下:this

首先,選擇菜單欄中的文件|New|File…命令,彈出New File對話框,如圖2.53所示。spa

 

圖2.53  操做步驟1orm

而後選擇General中的空類,輸入類的名稱後,單擊「新建」按鈕,此時,一個名爲MyView的類文件就建立好了。對象

(3打開MainStoryboard.storyboard文件,選擇主視圖後,選擇最右端的「屬性」按鈕,在屬性對話框中,將Class設置爲建立的類文件名MyView。如圖2.54所示。 blog

 

圖2.54  操做步驟2教程

(4打開MyView.cs文件,編寫代碼,實現一個自定義的視圖。代碼以下:事件

 

  • using System;
  • using System.Drawing;
  • using MonoTouch.Foundation;
  • using MonoTouch.UIKit;
  • using System.CodeDom.Compiler;
  • namespace Application
  • {
  •          partial class MyView : UIView
  •          {
  •                    private UILabel labelStatus;
  •                    public MyView (IntPtr handle) : base(handle)
  •                    {
  •                             this.Initialize();
  •                    }
  •                    public MyView(RectangleF frame) : base(frame)
  •                    {
  •                             this.Initialize();
  •                    }
  •          //初始化方法
  •                    private void Initialize()
  •                    {
  •                             this.BackgroundColor = UIColor.LightGray;
  •               //添加一個標籤對象
  •                             labelStatus = new UILabel (new RectangleF (0f, 0f, this.Frame.Width, 60f));
  •                             labelStatus.TextAlignment = UITextAlignment.Center;
  •                             labelStatus.BackgroundColor = UIColor.DarkGray;
  •                             labelStatus.TextColor = UIColor.White;
  •                             this.AddSubview (this.labelStatus);
  •                    }
  •          //實現觸摸事件
  •                    public override void TouchesMoved (NSSet touches, UIEvent evt)
  •                    {
  •                             base.TouchesMoved (touches, evt);
  •                             UITouch touch = (UITouch)touches.AnyObject;
  •                             PointF touchLocation = touch.LocationInView (this);               //獲取觸摸點的當前位置
  •                             labelStatus.Text = String.Format ("X: {0} - Y: {1}", touchLocation.X, touchLocation.Y);
  •                    }
  •          }
  • }

 

運行效果如圖2.55所示。

 

圖2.55  運行效果

注意:如下的構造器覆蓋了基類的UIView(IntPtr)構造器,此構造函數老是被當爲一個經過本地化代碼進行初始化的視圖。

 

  • public MyView (RectangleF frame) : base(frame) {}

 

TouchesMoved()方法被重寫,當用戶的手指在主視圖上進行移動時,就會執行此方法中的內容。

Xamarin iOS 一次性修改相同的視圖

在一個應用程序中,使用了不少相同的視圖。若是想要更改這些視圖的屬性,而且屬性都相同,該怎麼辦呢?可能聰明的開發者會想到,首先在一個視圖對象中編寫好更改的屬性,而後進行復制,最好改變此屬性對應的對象名就能夠了。

這樣的方法確實可行,可是它只適用於個數較少的視圖對象。若是此應用程序中有成百上千的相同的視圖對象時,這種方法仍是否可行?固然是不可行的了,這樣會使代碼看起來冗餘,而且會花費開發者至關長的時間。那麼有沒有方法能夠一次性的將相同視圖的相同屬性進行修改呢?答案當前是確定的了。使用Appearance屬性就能夠實現了,它是一個類型方法,其語法形式以下:

 

  • 視圖類.Appearance.視圖的屬性=屬性設置;

 

【示例2-34】如下的代碼就使用了Appearance屬性,將主視圖中的全部標籤改成青色背景,標題顏色爲棕色的視圖。代碼以下:

 

  • using System;
  • using System.Drawing;
  • using MonoTouch.Foundation;
  • using MonoTouch.UIKit;
  • namespace Application
  • {
  •          public partial class __14ViewController : UIViewController
  •          {
  •                    ……                                                //這裏省略了視圖控制器的構造方法和析構方法
  •                    #region View lifecycle
  •                    public override void ViewDidLoad ()
  •                    {
  •                             base.ViewDidLoad ();
  •                             // Perform any additional setup after loading the view, typically from a nib.
  •               //添加標題對象label1
  •                             UILabel label1 = new UILabel ();
  •                             label1.Frame = new RectangleF (0, 90, 320, 50);
  •                             label1.Text="紅色";
  •                             this.View.AddSubview (label1);
  •                        //添加標題對象label1
  •                             UILabel label2 = new UILabel ();
  •                             label2.Frame = new RectangleF (0, 200, 320, 50);
  •                             label2.Text="黃色";
  •                             this.View.AddSubview (label2);
  •                             //添加標題對象label1
  •                             UILabel label3 = new UILabel ();
  •                             label3.Frame = new RectangleF (0, 310, 320, 50);
  •                             label3.Text="青色";
  •                             this.View.AddSubview (label3);
  •                             //添加標題對象label1
  •                             UILabel label4 = new UILabel ();
  •                             label4.Frame = new RectangleF (0, 420, 320, 50);
  •                             label4.Text="藍色";
  •                             this.View.AddSubview (label4);
  •                    }
  •                    ……                                                //這裏省略了視圖加載和卸載先後的一些方法
  •                    #endregion
  •          }
  • }

 

運行效果如圖2.56所示。

 

  • UILabel.Appearance.BackgroundColor = UIColor.Cyan;                           //設置全部標籤的背景
  • UILabel.Appearance.TextColor = UIColor.Brown;                                       //設置全部標籤的文本顏色

 

運行效果如圖2.57所示。

 

圖2.56  運行效果             圖2.57  運行效果

本文選自:Xamarin iOS開發實戰大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!

相關文章
相關標籤/搜索