Xamarin iOS教程之自定義檢視

大學霸發表於2015-06-24

Xamarin iOS教程之自定義檢視

Xamarin iOS自定義檢視

工具欄中的檢視在實際應用開發中用的很多,但是為了吸引使用者的眼球,開發者可以做出一些自定義的檢視。

【示例2-33】以下將實現一個自定義的檢視。當使用者觸控螢幕時,就會出現一個顯示手指當前位置的標籤檢視,以及改變主檢視的背景顏色。程式碼如下:

1建立一個Single View Application型別的工程,命名為2-13

2新增一個C#的類檔案,並命名為MyView,具體步驟如下:

首先,選擇選單欄中的檔案|New|File…命令,彈出New File對話方塊,如圖2.53所示。


2.53  操作步驟1

然後選擇General中的空類,輸入類的名稱後,單擊“新建”按鈕,此時,一個名為MyView的類檔案就建立好了。

3開啟MainStoryboard.storyboard檔案,選擇主檢視後,選擇最右端的“屬性”按鈕,在屬性對話方塊中,將Class設定為建立的類檔名MyView。如圖2.54所示。 


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人!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1710120/,如需轉載,請註明出處,否則將追究法律責任。

相關文章