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