文档章节

Xamarin iOS教程之键盘的使用和设置

大学霸
 大学霸
发布于 2015/06/19 10:35
字数 1944
阅读 484
收藏 0
点赞 0
评论 0

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人!


© 著作权归作者所有

共有 人打赏支持
大学霸
粉丝 247
博文 860
码字总数 555903
作品 0
东城
程序员
Xamarin iOS教程之编辑界面编写代码

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

大学霸
2015/06/11
0
0
Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序

Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序。自从Xamarin问世后,C#的作用就发生了很大的变化。它不仅可以编写关于Windows...

大学霸
2014/10/23
0
0
Xamarin Anroid开发教程之Anroid开发工具及应用介绍

Xamarin Anroid开发教程之Anroid开发工具及应用介绍 Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热。但是在Android平台下只能使用J...

大学霸
2015/05/13
0
0
Xamarin iOS编写第一个应用程序创建工程

Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了。本节将主要讲解在Xamarin Studio中如何进行工程的创建以及编写代码等内容Xamarin...

大学霸
2015/01/22
0
0
iOS Simulator功能介绍关于Xamarin IOS开发

iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator。在没有iPhone或iPad设备时,可以使用iOS Simulat...

大学霸
2015/04/17
0
0
在Visual Studio中使用C#开发iOS & Android应用程序

Xamarin与微软合作,使开发人员可以在Visual Studio中构建iOS和Android应用程序。Xamarin大学教开发人员如何做。 Xamarin已于11月13日宣布与微软合作,为使用C#和Visual Studio构建完全原生的...

Yamazaki
2013/11/22
0
0
Xamarin iOS教程之添加和定制视图

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

大学霸
2015/06/16
0
0
Xamarin iOS开发实战1.1.3Xamarin版本

Xamarin iOS开发实战1.1.3Xamarin版本 Xamarin提供了免费版和付费版。免费版本包含Xamarin Studio服务。付费版本分为普通版299美元/年、商业版999美元/年和企业版1899美元/年。开发者可以根据...

大学霸
2014/12/17
0
0
Xamarin开发Anroid应用介绍

第1章 Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热。但是在Android平台下只能使用Java开发,iOS平台下也只能使用Objective-C或S...

大学霸
2015/04/07
0
0
Xamarin iOS教程之申请付费开发者账号下载证书

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

大学霸
2015/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Tomcat内存设置

第一步骤: 1、路径是Tomcat目录下的/bin/catalina.bat文件 打开catalina.bat文件 加入下面这句代码: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m 2、路径是...

一梦心草
12分钟前
0
0
IDEA 及 Gradle 使用总结

IDEA 及 Gradle 使用总结 自动编译组件 目前Android开发的主流开发工具是 Eclipse 和 IDEA 目前主流的自动化打包工具时 ant,maven,gradle。 maven工具中有自己的依赖仓库维护,很多开源支持...

舒文joven
12分钟前
0
0
lombok 引入后,测试类始终找不到get,set方法。

开发环境为idea,jdk1.7,maven3.5. 网上直接搜出来的方法有: 1、在setting里安装lombok的plugins; 2、如下图,勾选enable annocation processing选项 3、升级maven plugins插件 我尝试了以...

Kidult
14分钟前
0
0
Duang,HUAWEI DevEco IDE全面升级啦

想感受全新UI带来的视觉及交互体验、 HiKey970开发板调测、 HiAI API推荐和收藏、 深度AI模型分析等新功能, 体验高清晰度和流畅度的远程AI真机调测吗? 全新的UI设计 采用最优秀的视觉及交互...

华为终端开放实验室
22分钟前
0
0
阻止事件冒泡,阻止默认事件

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event....

闫亚亚
24分钟前
0
0
网络监控工具类

package com.guorentong.learn.organ.utils;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManage......

王先森oO
24分钟前
0
0
命令

sudo nginx -s reload 重启nginx sudo lsof -i -P | grep -i "listen" 查看端口占用

那个猴子
28分钟前
0
0
用scrapy-redis爬去新浪-以及把数据存储到

需求:爬取新浪网导航页(http://news.sina.com.cn/guide/)所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 准备工作: a.安装redis(windows或者linux) b.安装Redis Des...

丁典
28分钟前
0
0
PHP常用函数篇

1.为什么要使用函数? 除了内建的PHP函数,我们可以创建我们自己的函数。 函数是可以在程序中重复使用的语句块。 使代码逻辑更清晰 避免过多的全局变量 封装后避免相同逻辑重复代码,只需调用...

天地有涯风有信_大海无量不见人
29分钟前
0
0
对List分组

在日常工作中会遇到这样的情景,我们需要对List按照List中对象的一个值进行分组。比如一个Human的List,我们要根据性别分组,传统的方法是做双层循环,逐个对比,今天我要介绍一种详单简单的...

珂jack
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部