在文本框和文本視圖中能夠看到,當用戶在觸摸這些視圖後,就會彈出鍵盤。本節將主要講解鍵盤的輸入類型定義、顯示鍵盤時改變輸入視圖的位置等內容。ide
鍵盤的類型不僅一種,而是有不少種的。當用戶要實現編輯一個聯繫人時,鍵盤就會隨着所輸入的內容不一樣而發生變化。例如當要輸入聯繫人的電話號碼時,鍵盤就變爲數字鍵盤。在不一樣的地方使用不一樣類型的鍵盤,會使用戶的操做變得簡單。要定製鍵盤的顯示類型其實很簡單,就是要對文本框或者是文本視圖的第二大屬性進行設置。通常稱第二大屬性爲「輸入設置」,如圖2.34所示。工具
圖2.34 輸入設置this
在iOS 8.3中,能夠顯示的鍵盤類型如表2-10所示。spa
表2-10 鍵盤類型orm
【示例2-19】如下將使用代碼對定義一個獨特的鍵盤。具體步驟以下:對象
(1)建立一個Single View Application類型的工程,命名爲2-24。教程
(2)打開MainStoryboard.storyboard文件,對主視圖進行設置。效果如圖2.35所示。開發
圖2.35 主視圖的效果it
須要添加的視圖以及設置如表2-11所示。io
表2-11 設置視圖
(3)打開2-24ViewController.cs文件,編寫代碼,實現定製一個特殊的鍵盤。代碼以下:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace Application
{
public partial class __24ViewController : UIViewController
{
…… //這裏省略了視圖控制器的構造方法和析構方法
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
tf.KeyboardType = UIKeyboardType.Url; //設置鍵盤的類型
tf.KeyboardAppearance = UIKeyboardAppearance.Dark; //設置鍵盤的外觀
tf.ReturnKeyType = UIReturnKeyType.Next; //設置鍵盤的Return鍵
}
…… //這裏省略了視圖加載和卸載先後的一些方法
#endregion
}
}
運行效果如圖2.36所示。
圖2.36 運行效果
有的時候,使用應用程序的用戶遇到彈出的鍵盤擋住了輸入的文本框或者文本視圖,此時該如何解決呢,這就是下面將要講解的內容。
【示例2-20】如下將在彈出鍵盤後,將擋住的文本框改變位置。具體步驟以下:
(1)建立一個Single View Application類型的工程,命名爲2-7。
(2)打開MainStoryboard.storyboard文件,將主視圖的背景顏色設置爲Scrollview Textured Background color。
(3)打開2-7ViewController.cs文件,編寫代碼,實如今顯示鍵盤時改變文本框視圖的位置。代碼以下:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace Application
{
public partial class __7ViewController : UIViewController
{
private NSObject kbdWillShow, kbdDidHide;
UITextField emailField= new UITextField ();
…… //這裏省略了視圖控制器的構造方法和析構方法
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
emailField.Frame = new RectangleF (10, 500, 300, 30);
emailField.BorderStyle = UITextBorderStyle.RoundedRect;
this.View.AddSubview (emailField);
//鍵盤將要顯示時
kbdWillShow = UIKeyboard.Notifications.ObserveWillShow((s, e) => {
RectangleF kbdBounds = e.FrameEnd;
RectangleF textFrame = emailField.Frame;
textFrame.Y -= kbdBounds.Height;
emailField.Frame = textFrame;
} );
//鍵盤將要隱藏時
kbdDidHide = UIKeyboard.Notifications.ObserveDidHide((s, e) => {
RectangleF kbdBounds = e.FrameEnd;
RectangleF textFrame = emailField.Frame;
textFrame.Y += kbdBounds.Height;
emailField.Frame = textFrame;
} );
//觸摸鍵盤上的return鍵
emailField.ShouldReturn = delegate(UITextField textField) {
return textField.ResignFirstResponder ();
} ;
}
…… //這裏省略了視圖加載和卸載先後的一些方法
#endregion
}
}
運行效果如圖2.37所示。
圖2.37 運行效果
注意:當用戶輕拍文本框時,彈出的鍵盤不能夠擋住須要輸入文本的文本框,這是每個開發者的責任,以確保用戶能夠看到自已在文本框中究竟輸入了什麼。在這種狀況下,咱們須要在默認的通知中心添加一個觀察者ObserveWillShow(鍵盤將要顯示時的觀察者)和ObserveWillShow(鍵盤將要隱藏時的觀察者),代碼以下:
this.kbdWillShow = UIKeyboard.Notifications.ObserveWillShow((s, e) => {
……
} );
kbdDidHide = UIKeyboard.Notifications.ObserveDidHide((s, e) => {
……
} );
通知中心是iOS的機制,專門供程序中不一樣類間的消息通訊而設置的。正常狀況下,它能夠經過NSNotificationCenter.DefaultCenter進行訪問。在Xamarin.iOS中提供了一些APIs,它們能夠簡化一些事情。在此示例中開發者會發現兩個APIs的用法就是ObserveWillShow和ObserveDidHide。經過調用UIKeyboard.Notifications.ObserveWillShow,通知中心將會通知咱們鍵盤即將要顯示,同時會執行UIKeyboard.Notifications.ObserveWillShow中的程序。通用UIKeyboard.Notifications.ObserveDidHide,通知中心將會通知咱們鍵盤即將要隱藏,同時會執行UIKeyboard.Notifications.ObserveDidHide中的程序。
有的時候,爲了讓鍵盤的功能更爲齊全,免不了要爲它添加添加一個工具欄,此時須要使用到InputAccessoryView屬性。
【示例2-21】如下就是爲鍵盤添加工具欄,在工具欄中有一個「完成」的按鈕,單擊此按鈕後,鍵盤就會隱藏。代碼以下:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace Application
{
public partial class __8ViewController : UIViewController
{
…… //這裏省略了視圖控制器的構造方法和析構方法
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
//爲主視圖添加文本框對象
UITextField emailField=new UITextField();
emailField.Frame = new RectangleF (10, 100, 300, 30);
emailField.BorderStyle = UITextBorderStyle.RoundedRect; //設置文本框的邊框
this.View.AddSubview (emailField);
emailField.KeyboardType = UIKeyboardType.EmailAddress; //設置鍵盤的類型
//設置工具欄
UIToolbar toolHigh = new UIToolbar (); //實例化工具欄對象
toolHigh.SizeToFit();
toolHigh.BackgroundColor = UIColor.DarkGray; //設置背景
//實例化欄按鈕條目
UIBarButtonItem doneHigh = new UIBarButtonItem("完成",UIBarButtonItemStyle.Done,
(ss, ea) => {
emailField.ResignFirstResponder(); //關閉鍵盤
}
);
toolHigh.SetItems(new UIBarButtonItem[] { doneHigh }, true); //爲工具欄設置條目
emailField.InputAccessoryView = toolHigh; //爲鍵盤添加自定義視圖
}
…… //這裏省略了視圖加載和卸載先後的一些方法
#endregion
}
}
運行效果如圖2.38所示。
圖2.38 運行效果
本小節將講解3種經常使用的退出鍵盤的方法。
1.使用鍵盤上的return
使用鍵盤上的return鍵退出鍵盤,咱們在2.6.2小節的代碼中提到了,代碼以下。這裏,須要使用到ShouldReturn()委託方法和ResignFirstResponder()方法。
emailField.ShouldReturn = delegate(UITextField textField) {
return textField.ResignFirstResponder ();
} ;
2.使用按鈕實現觸摸背景退出
經過按鈕退出鍵盤咱們也在2.6.3小節中提到了,代碼以下,須要使用ResignFirstResponder方法。
UIBarButtonItem doneHigh = new UIBarButtonItem("完成",UIBarButtonItemStyle.Done,
(ss, ea) => {
emailField.ResignFirstResponder(); //關閉鍵盤
}
);
若是須要按鈕實現觸摸背景退出鍵盤,咱們須要使用到UIButton。至於此按鈕的響應相似於2.6.3小節中使用帶的代碼。
3.針對文本視圖在菜單欄中退出鍵盤
最後一種退出鍵盤是針對文本視圖的。在文本視圖出現的菜單中添加一個菜單項,將此菜單項實現退出鍵盤的功能。
【示例2-22】下面將在文本視圖的菜單欄中退出鍵盤。具體的操做步驟以下:
(1)建立一個Single View Application類型的工程,命名爲2-35。
(2)打開MainStoryboard.storyboard文件,拖動視圖庫中的文本框視圖對象到主視圖中,將此視圖對象的Name設置爲tf。
(3)打開2-35ViewController.cs文件,編寫代碼,實現退出鍵盤的功能。代碼以下:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.ObjCRuntime;
namespace Application
{
public partial class __35ViewController : UIViewController
{
……
#region View lifecycle
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
//添加菜單按鈕
UIMenuItem item=new UIMenuItem("退出",new Selector("hide"));
UIMenuController menu = UIMenuController.SharedMenuController;
menu.MenuItems = new UIMenuItem[] {
item
};
}
[Export("hide")]
//退出鍵盤
public void hide(){
tv.ResignFirstResponder ();
}
……
#endregion
}
}
此時運行程序,會看到如圖2.39所示的效果。
圖2.39 運行效果
本文選自:Xamarin iOS開發實戰大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!