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的用法就是ObserveWillShow和ObserveDidHide。通过调用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人!

Xamarin iOS教程之键盘的使用和设置的更多相关文章

  1. 最详细在Windows安装Xamarin.iOS教程

    最详细在Windows安装Xamarin.iOS教程 来源:http://www.cnblogs.com/llyfe2006/articles/3098280.html 本文展示了如何设立Xamari ...

  2. Xamarin iOS教程之显示和编辑文本

    Xamarin iOS教程之显示和编辑文本 Xamarin iOS显示和编辑文本 在一个应用程序中,文字是非常重要的.它就是这些不会说话的设备的嘴巴.通过这些文字,可以很清楚的指定这些应用程序要表达的 ...

  3. Xamarin iOS教程之视图显示图像

    Xamarin iOS教程之视图显示图像 Xamarin iOS显示图像 在主视图中显示一个图像,可以让开发者的应用程序变的更有趣,例如,在一些应用程序开始运行时,都会通过图像来显示此应用程序的玩法或 ...

  4. Xamarin iOS教程之使用按钮接接收用户输入

    Xamarin iOS教程之使用按钮接接收用户输入 Xamarin iOS使用按钮接接收用户输入 按钮是用户交互的最基础控件.即使是在iPhone或者iPad中,用户使用最多操作也是通过触摸实现点击. ...

  5. Xamarin iOS教程之添加和定制视图

    Xamarin iOS教程之添加和定制视图 Xamarin iOS用户界面——视图 在iPhone或者iPad中,用户看到的摸到的都是视图.视图是用户界面的重要组成元素.例如,想要让用户实现文本输入时 ...

  6. Xamarin iOS教程之申请付费开发者账号下载证书

    Xamarin iOS教程之申请付费开发者账号下载证书 Xamarin iOS使用真机测试应用程序 在讲解iOS Simulator时,已经提到了虽然iOS Simulator可以模仿真实的设备,但是 ...

  7. Xamarin iOS教程之编辑界面编写代码

    Xamarin iOS教程之编辑界面编写代码 Xamarin iOS的Interface Builder Interface Builder被称为编辑界面.它是一个虚拟的图形化设计工具,用来为iOS应 ...

  8. Xamarin iOS教程之自定义视图

    Xamarin iOS教程之自定义视图 Xamarin iOS自定义视图 工具栏中的视图在实际应用开发中用的很多,但是为了吸引用户的眼球,开发者可以做出一些自定义的视图. [示例2-33]以下将实现一 ...

  9. Xamarin iOS教程之警告视图

    Xamarin iOS教程之警告视图 Xamarin iOS警告视图 如果需要向用户显示一条非常重要的消息时,警告视图(UIAlertView类)就可以派上用场了.它的功能是把需要注意的信息显示给用户 ...

随机推荐

  1. [Java] I/O底层原理之三:NIO

    本篇文章参考自并发编程网 一.NIO 的概述 NIO 由以下几个核心组成 Channels Buffers Selectors 选择器用于监听多个通道的事件(如:链接打开.数据达到),单个线程可以监听 ...

  2. 支付宝APP支付,提示代码 ALIN10070

    ALIN10070 此代码时ALI64代码拆分后的细分代码: 代表签名验证失败等相关问题: 如果近期修改过或者续签 过签约协议,也需要更新公私钥.

  3. H5 Day2 练习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Asp.net 子web application的Session共享

    需求提出: 网站: 父Web Application: http://www.test.com/ 子Web Application 1: http://www.test.com/child1 子Web ...

  5. Excel VBA保护工作表

    '设定可编辑区域 ActiveSheet.Protection.AllowEditRanges.Add Title:="区域1", Range:=Range("E5:H1 ...

  6. 20155318 2016-2017-2 《Java程序设计》第六周学习总结

    20155318 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解 ...

  7. iOS必学技-cocoapods

    我就不再造轮子了,网上的教程很详细,楼主亲测,好用. http://code4app.com/article/cocoapods-install-usage 楼主安装使用过程中遇到以下几个问题,同学们 ...

  8. 第10月第1天 storyboard uitableviewcell

    1. 如图,我们在Cell的属性界面对其进行了注册,identifier 为"TableViewCell" 不需要在 ViewDidLoad 对其进行注册了,如果进行注册的话,则对 ...

  9. HDU 2073 无限的路 (模拟)

    题目链接 Problem Description 甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形: 甜甜的好朋友蜜蜜发现 ...

  10. 【ARTS】01_06_左耳听风-20181217~1223

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...