工具欄中的視圖在實際應用開發中用的不少,可是爲了吸引用戶的眼球,開發者能夠作出一些自定義的視圖。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所示。 教程
圖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()方法被重寫,當用戶的手指在主視圖上進行移動時,就會執行此方法中的內容。
在一個應用程序中,使用了不少相同的視圖。若是想要更改這些視圖的屬性,而且屬性都相同,該怎麼辦呢?可能聰明的開發者會想到,首先在一個視圖對象中編寫好更改的屬性,而後進行復制,最好改變此屬性對應的對象名就能夠了。
這樣的方法確實可行,可是它只適用於個數較少的視圖對象。若是此應用程序中有成百上千的相同的視圖對象時,這種方法仍是否可行?固然是不可行的了,這樣會使代碼看起來冗餘,而且會花費開發者至關長的時間。那麼有沒有方法能夠一次性的將相同視圖的相同屬性進行修改呢?答案當前是確定的了。使用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人!