Xamarin iOS教程之鍵盤的使用和設定

大學霸發表於2015-06-19

Xamarin iOS教程之鍵盤的使用和設定

Xamarin iOS使用鍵盤

在文字框和文字檢視中可以看到,當使用者在觸控這些檢視後,就會彈出鍵盤。本節將主要講解鍵盤的輸入型別定義、顯示鍵盤時改變輸入檢視的位置等內容。

Xamarin iOS定製鍵盤的輸入型別

鍵盤的型別不只一種,而是有很多種的。當使用者要實現編輯一個聯絡人時,鍵盤就會隨著所輸入的內容不同而發生變化。例如當要輸入聯絡人的電話號碼時,鍵盤就變為數字鍵盤。在不同的地方使用不同型別的鍵盤,會使使用者的操作變得簡單。要定製鍵盤的顯示型別其實很簡單,就是要對文字框或者是文字檢視的第二大屬性進行設定。一般稱第二大屬性為“輸入設定”,如圖2.34所示。


2.34  輸入設定

iOS 8.3中,可以顯示的鍵盤型別如表2-10所示。

2-10  鍵盤型別

 

【示例2-19】以下將使用程式碼對定義一個獨特的鍵盤。具體步驟如下:

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

2開啟MainStoryboard.storyboard檔案,對主檢視進行設定。效果如圖2.35所示。


2.35  主檢視的效果

需要新增的檢視以及設定如表2-11所示。

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  執行效果

Xamarin iOS顯示鍵盤時改變輸入檢視的位置

有的時候,使用應用程式的使用者遇到彈出的鍵盤擋住了輸入的文字框或者文字檢視,此時該如何解決呢,這就是下面將要講解的內容。

【示例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的用法就是ObserveWillShowObserveDidHide。透過呼叫UIKeyboard.Notifications.ObserveWillShow,通知中心將會通知我們鍵盤即將要顯示,同時會執行UIKeyboard.Notifications.ObserveWillShow中的程式。通用UIKeyboard.Notifications.ObserveDidHide,通知中心將會通知我們鍵盤即將要隱藏,同時會執行UIKeyboard.Notifications.ObserveDidHide中的程式。

Xamarin iOS為鍵盤新增工具欄

有的時候,為了讓鍵盤的功能更為齊全,免不了要為它新增新增一個工具欄,此時需要使用到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  執行效果

Xamarin iOS退出鍵盤

本小節將講解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人!

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

相關文章