與標籤視圖不一樣,文本框視圖(通常使用UITextField類實現)能夠接收用戶的文本輸入,並進行顯示。ide
【示例2-16】如下將使用文本框來實現QQ登陸界面的效果。具體步驟以下:this
(1)建立一個Single View Application類型的工程,命名爲2-5spa
(2)打開MainStoryboard.storyboard文件,對主視圖進行設置。效果如圖2.30所示。orm
圖2.30 主視圖對象
須要添加的視圖以及設置如表2-8所示。繼承
表2-8 設置主視圖開發
(3)打開2-5ViewController.cs文件,編寫代碼,實現QQ登陸界面的功能。代碼以下:字符串
using System;it
using System.Drawing;io
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace Application
{
public partial class __5ViewController : UIViewController
{
UITextField tf1;
UITextField tf2;
…… //這裏省略了視圖控制器的構造方法和析構方法
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
//爲主視圖添加文本框對象tf1
tf1 = new UITextField ();
tf1.BorderStyle = UITextBorderStyle.RoundedRect; //設置文本框的邊框
tf1.Frame = new RectangleF (54, 150, 211, 30);
tf1.Placeholder="帳號"; //設置文本框的佔位符
this.View.AddSubview (tf1);
//爲主視圖添加文本框對象tf2
tf2 = new UITextField ();
tf2.BorderStyle = UITextBorderStyle.RoundedRect;
tf2.Frame = new RectangleF (54, 220, 211, 30);
tf2.Placeholder="密碼";
tf2.SecureTextEntry = true; //設置文本框的文本是否隱藏
this.View.AddSubview (tf2);
button.TouchUpInside += this.ButtonChange_TouchUpInside;
label.Hidden = true;
}
//觸摸「登陸」按鈕後,執行的動做
private void ButtonChange_TouchUpInside (object sender, EventArgs e)
{
//判斷文本框對象tf1和tf2是否爲空
if (tf1.Text.Length != 0 && tf2.Text.Length != 0) {
this.View.BackgroundColor = UIColor.Orange;
label.Hidden = true;
} else {
label.Hidden = false;
}
}
…… //這裏省略了視圖加載和卸載先後的一些方法
#endregion
}
}
運行效果如圖2.31所示。
圖2.31 運行效果
注意:在此程序中,使用了BorderStyle屬性對文本框的邊框風格進行了設置。這些邊框風格如表2-9所示。
表2-9 邊框風格
SecureTextEntry屬性能夠使編輯的文本隱藏,以小黑點的形式顯示。此屬性通常使用在輸入密碼時,防止被他人盜取。
限制文本框的輸入長度在輸入手機號碼、銀行卡號碼的應用程序中最常使用。限制文本框的輸入長度須要使用ShouldChangeCharacters()方法實現。
【示例2-17】下面將只容許用戶在文本框中輸入10個字符。具體的操做步驟以下:
(1)建立一個Single View Application類型的工程,命名爲2-34。
(2)打開MainStoryboard.storyboard文件,拖動視圖庫中的文本框視圖對象到主視圖中,將此視圖對象的Name設置爲tf。
(3)打開2-34ViewController.cs文件,編寫代碼,實現限制文本框的輸入長度的功能。代碼以下:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace Application
{
public partial class __34ViewController : UIViewController
{
…… //這裏省略了視圖控制器的構造方法和析構方法
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
tf.ShouldChangeCharacters = (textField, range, replacementString) => {
if (range.Location < 10) {
return true;
} else {
return false;
}
};
}
…… //這裏省略了視圖加載和卸載先後的一些方法
#endregion
}
}
此時運行程序,會看到如圖2.32所示的效果。
圖2.32 運行效果
注意:在此應用程序中用戶只能夠輸入10個字符串。
文本框視圖只容許用戶輸入單行文本,若是想要輸入多行文本該怎麼辦呢?這就須要使用文本視圖解決。UITextView類提供了一個顯示文本編輯塊的方式。
【示例2-18】如下就是使用文本視圖實現多行文本的輸入。代碼以下:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace Application
{
public partial class __6ViewController : UIViewController
{
…… //這裏省略了視圖控制器的構造方法和析構方法
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
//爲主視圖添加文本視圖對象myTextView
UITextView myTextView = new UITextView ();
myTextView .Frame = new RectangleF (9, 90, 302, 180);
this.View.AddSubview (myTextView);
//爲主視圖添加文本視圖對象myText
UITextView myText = new UITextView ();
myText .Frame = new RectangleF (9, 330, 302, 180);
myText.Editable=false;
this.View.AddSubview (myText);
myText.Hidden = true;
//爲主視圖添加按鈕對象button
UIButton button = new UIButton ();
button.Frame = new RectangleF (137, 56, 46, 30);
button.SetTitle ("完成", UIControlState.Normal);
this.View.AddSubview (button);
button.TouchUpInside += (sender, e) => {
myTextView.ResignFirstResponder(); //關閉鍵盤
myText.Hidden=false;
myText.Text=myTextView.Text;
} ;
myTextView.Delegate = new MyTextViewDelegate(); //設置委託
}
//添加嵌套的類
private class MyTextViewDelegate : UITextViewDelegate
{
//當文本視圖剛開始編輯時調用
public override void EditingStarted (UITextView textView)
{
Console.WriteLine ("開始編輯文本");
}
//當文本視圖編輯結束時調用
public override void EditingEnded (UITextView textView)
{
Console.WriteLine ("結束編輯文本");
}
//當文本視圖中的內容改變時調用
public override void Changed (UITextView textView)
{
Console.WriteLine ("編輯文本");
}
}
…… //這裏省略了視圖加載和卸載先後的一些方法
#endregion
}
}
運行效果如圖2.33所示。
圖2.33 運行效果
在此示例中,須要注意兩點:
1.鍵盤的消失
當用戶觸摸文本視圖區域時,就會顯示鍵盤;當觸摸「完成」按鈕後,顯示的鍵盤就會消失。讓鍵盤消失的方式其實很簡單,就是使用ResignFirstResponder()方法取消當前的視圖的第一響應功能。
2.文本視圖的委託
當用戶觸摸文本框視圖時,會在應用程序輸出窗口輸出「開始編輯文本」;當文本的內容有所改變時,會在應用程序輸出窗口輸出「編輯文本」;當觸摸按鈕後,會輸出「結束文本編輯」。這些功能的實現就是經過了設置文本視圖的委託delegate實現的。咱們將文本視圖的委託設置爲了MyTextViewDelegate類,此類繼承了UITextViewDelegate類。如如下的代碼
private class MyTextViewDelegate : UITextViewDelegate
{
……
}
在MyTextViewDelegate類中重寫了父類UITextViewDelegate中的方法EditingStarted()、EditingEnded()、Changed(),實現了在應用程序輸出窗口的字符串輸出。
本文選自:Xamarin iOS開發實戰大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!