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. Qt ------ UDP发送不了或接收不到问题

    1.禁用不需要的网卡,比如禁用虚拟机网卡. 2.向所有网卡广播数据 /* * 直接调用 QUdpSocket 的 writeDatagram() 函数发送数据,如果有多张网卡(装了虚拟机会增加网卡), ...

  2. python高级特性和高阶函数

    python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...

  3. Hadoop基础--统计商家id的标签数案例分析

    Hadoop基础--统计商家id的标签数案例分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 将“temptags.txt”中的数据进行分析,统计出商家id的评论标 ...

  4. spring cloud微服务架构 服务提供者和服务消费者

    服务提供者和服务消费者 下面这张表格,简单描述了服务提供者/消费者是什么:   | 名词 | 概念 | | ----- | ----------------------- | | 服务提供者 | 服务 ...

  5. pandas 实现通达信里的MFI

    pandas 实现通达信里的MFI 算法里的关键点: combine()和rolling().sum()方法 combine -- 综合运算, rolling().sum() -- 滚动求和 利用pd ...

  6. 微软官网给出CSS选择器支持列表

    CSS Compatibility and Internet Explorer 这是在 @司徒正美 博客里看到的,所以搬到自己博客,收藏下..正如司徒兄所说,微软太狡滑了,如果把不支持的属性用红色标示 ...

  7. expect 交互 之shell执行命令操作

    shell 执行命令操作 /usr/bin/expect -c " proc jiaohu {} { send_user expect_start expect { password { s ...

  8. 关于markdown文件插入图片遇到的小问题和解决办法

    今天用md文件时候发现需要插入图片,以前没做过,所以写下来分享下. 1.先在自己的github上建一个仓库,里面新建个img文件夹存放图片,怎么建仓库可以上网找资料,这里就不详细说明了.建好的仓库如下 ...

  9. 针对Jigsaw勒索软件的解锁工具

    针对Jigsaw勒索软件的解锁工具 据了解, 用户的计算机系统一旦感染了勒索软件Jigsaw,如果用户没有在一个小时之内支付赎金(0.4个比特币,价值约为150美金),那么恶意软件将会把系统中的上千份 ...

  10. springcloud Zuul中路由配置细节

    上篇文章我们介绍了API网关的基本构建方式以及请求过滤,小伙伴们对Zuul的作用应该已经有了一个基本的认识,但是对于路由的配置我们只是做了一个简单的介绍,本文我们就来看看路由配置的其他一些细节. 首先 ...