iOS开发那些事-iOS常用设计模式–委托模式案例实现

书接上回,应用案例

我们以UITextFieldDelegate为例来说明一下委托的使用。 UITextFieldDelegate是控件UITextField的 委托,控件的委托主要负责响应控件事件或控制其他对象。除了UITextField,WebView、UITableView等控件也有相应的委托对象。

打开UITextFieldDelegate的API文档,其中有4个有关编辑的方法,还要3个其它方法。

61

这里我们在编辑过程中消息的发送,UITextField编辑过程中与UITextFieldDelegate委托对象之间交互过程。

71

在 文本框编辑开始前后会发出消息textFieldShouldBeginEditing:和 textFieldDidBeginEditing:,编辑结束前后会发出消息textFieldShouldEndEditing:和 textFieldDidEndEditing:。

为了演示文本框编辑前后发生了什么,我们需要编写一个简单的文本框工程,画面中只有一个文本框。

81

我们在视图控制器ViewController中实现UITextFieldDelegate,ViewController是UITextField的委托对象。ViewController.h代码如下:

#import <UIKit/UIKit.h>@interface ViewController : UIViewController<UITextFieldDelegate>@property (weak, nonatomic) IBOutlet UITextField *textField;@end

 

 

h文件中ViewController实现了UITextFieldDelegate协议,把UITextField 定义为一个弱引用的“输出口”(“输出口”概念我们将在UIView与控件一章详细介绍)。

ViewController.m代码如下:

@implementation ViewController- (void)viewDidLoad{[super viewDidLoad];self.textField.delegate = self;}#pragma mark — UITextFieldDelegate method- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{NSLog(@”call textFieldShouldBeginEditing:”);return YES;}- (void)textFieldDidBeginEditing:(UITextField *)textField{NSLog(@”call textFieldDidBeginEditing:”);}- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{NSLog(@”call textFieldShouldEndEditing:”);return YES;}- (void)textFieldDidEndEditing:(UITextField *)textField{NSLog(@”call textFieldDidEndEditing:”);}- (BOOL)textFieldShouldReturn:(UITextField *)textField{NSLog(@”call textFieldShouldReturn:”);[textField resignFirstResponder];return YES;}@end

 

 

在 m文件中viewDidLoad 方法self.textField.delegate = self语句极为重要,它将委托对象ViewController分配给文本框对象,除了通过代码我们也可以通过IB工具进行连线分配。打开故事板文件, 右键点击文本框控件,弹出菜单,用鼠标拖拽位于Outlets(输出口)下面的delegate后面的圆圈,到View Controller上松开鼠标。

91

这样运行代码,当触摸文本框使其处于编辑状态时,在日志中会输出:

call textFieldShouldBeginEditing:

call textFieldDidBeginEditing:

输入完成点击“return”键关闭键盘,结束编辑状态,日志中输出:

call textFieldShouldReturn:

call textFieldShouldEndEditing:

call textFieldDidEndEditing:

textFieldShouldReturn:是点击“return”键发出的消息。我们借助于该消息通过[textField resignFirstResponder]方法关闭键盘。

更 复杂的控件(如UITableView)除了委托协议(UITableViewDelegate)还有 数据源协议(UITableViewDataSource)。数据源与委托一样都是委托设计模式的具应用,委托对象主要对控件对象的事件和状态变化做出响 应,而数据源对象是为控件对象提供数据。需要注意的是委托中的方法在实现时是可选的,而数据源中的方法一般必须实现。

转载于:https://www.cnblogs.com/iOS-Blog/archive/2013/02/25/2931620.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows API 逐个逐个学MessageBox(5) 遍历驱动器并获取驱动器属性 GetLogicalDriveStrings、GetDriveTypeA...

首先还是贴代码 VC Code: /* *************************************《精通Windows API》 * 示例代码* GetVolumeInfo.c* 4.2.1 遍历驱动器并获取驱动器属性**************************************//* 头文件 */ #include <windows.h> #include <stdlib.h> #i…

linux下搭建nagios监控

一、什么是nagios 1.nagios 简介 Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等。Nagios可运行在Linux/Unix平台之上&#xff0c;同时提供一个可选的基于浏览器的WEB界面以方便系统管理人…

zabbix的安装

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix由2部分构成&#xff0c;zabbixserver与可选组件zabbix agent。 一、Zabbix简介 1.1Zabbix简介   Zabbix是一个企业级的开源分布式监控解决方案&…

对fgets的理解1

摘自《linux程序设计 中文第四版》第94页。 转载于:https://www.cnblogs.com/pengdonglin137/archive/2013/03/10/2952421.html

普通用户的sudo权限,禁止root用户登录

假如增加用户zhangsan的sudo权限。 修改/etc/sudoers文件&#xff0c;在root下增加如下一行。 增加用户名zhangsan&#xff1a; 禁止root用户登录&#xff1a; 修改/etc/ssh/sshd_config文件&#xff0c; 将 PermitRootLogin前的#号去掉&#xff0c;yes改为no&#xff0c;重启n…

什么是 MVC ?

ylbtech-Architecture: MVCASP.NET中 MVC。 1.A,概念 MVC是一种目前广泛流行的软件设计模式&#xff0c;MVC英文即Model-View-Controller&#xff0c;即把一个应用的输入、处理、输出 流程按照Model、View、Controller的方式进行分离&#xff0c;这样一个应用被分成三 个层——…

zabbix邮件报警

原文出自http://www.iyunv.com/thread-22904-1-1.html 首先web端的配置顺序如下&#xff1a; 创建用户媒介-->创建用户组和用户-->针对trigger&#xff08;触发器&#xff09;添加报警动作&#xff0c;设置邮件发送用户及媒介1. 创建用户媒介创建用户媒介-->创建用户…

zabbix的入门到精通之zabbix的触发器Trigger

第1章 Trigger 1.1 创建一个trigger选择&#xff1a;ConfigurationHost双击: Trigger双击:Create Trigger(位置在右上角)后图下图所示NameTrigger的名字Expression添加Trigger表达式&#xff0c;双击add后添加Multiple PROBLEM events generationDescription对trigger的描述URL…

Zabbix 探索主机 “Discovery” 自动发现主机 详细图文教程

Zabbix 自动发现&#xff08;Discovery&#xff09;功能使用随着 监控 主机不断增多&#xff0c;有的时候需要添加一批机器&#xff0c;特别是刚用zabbix的童鞋 需要将公司的所有服务器添加到zabbix&#xff0c;如果使用传统办法去单个添加设备、分组、项目、图像…..结果应该是…

图解如何制作苹果OS X系统ISO光盘

当我们从网上下载的原版苹果系统是DMG格式的&#xff0c;要做系统引导必须做成ISO才能做系统盘&#xff0c;所以本文介绍在Windows7下如何来制作苹果系统光盘&#xff0c;各位黑苹果的童鞋要注意了。 准备以下三个东西。 1、苹果OS10.8种子下载 OS X 10.8 正式版种子.torrent 2…

zabbix的b编译安装

原文出自&#xff1a;http://www.ttlsa.com/zabbix/install-zabbix-on-linux-5-ttlsa/ 在了解《zabbix硬件、软件需求》之后&#xff0c;在你心里应该有备选的机器。今天开始安装zabbix。zabbix需要LNMP或者LAMP环境。环境的搭建不在本章范围内。 LNMP环境配置 Linux安装&#…

rsync+inotify实现服务器之间文件实时同步

原文转自http://dl528888.blog.51cto.com/2382721/771533/ 之前做了“ssh信任与scp自动传输脚本”的技术文档&#xff0c;此方案是作为公司里备份的方法&#xff0c;但在实际的运行中&#xff0c;由于主服务器在给备份服务器传输的时候&#xff0c;我们的主服务器需要备份的文件…

zabbix监控特定进程

原文出自http://www.2cto.com/os/201405/302249.html 由于一些服务器上跑着一些重要程序&#xff0c;需要对它们进行监控&#xff0c;公司用的是zabbix监控&#xff0c;之前都是在zabbix中添加自定义脚本对特定程序进行监控&#xff0c;最近看了zabbix的官方文档&#xff0c;发…

OMA 设备管理的通知发起的会话OMA Device Management Notification Initiated Session

介绍 一些设备不能持续侦听是否有需要连接的服务器。有的设备基于安全考虑不希望“开放一个端口”&#xff08;比如主动接受连接&#xff09;。无论如何&#xff0c;大多数设备可以接受未经请求的信息&#xff0c;有时也叫做“通知”。比如一些手持设备可以接收SMS文本短信息。…

【zabbix个性化监控之一】TCP连接数

一、在被监控端上设置 主要命令&#xff1a; netstat -an | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}1netstat -an | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}输出内容&#xff1a; TIME_WAIT 100 CLOSE_WAIT 5 FIN_WAIT1 6 ESTABLISHED 161 S…

CentOS 6.4下PXE+Kickstart无人值守安装操作系统

原文出自http://http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html 一、简介 1.1 什么是PXE PXE(Pre-boot Execution Environment&#xff0c;预启动执行环境)是由Intel公司开发的最新技术&#xff0c;工作于Client/Server的网络模式&#xff0c;支持…

CSS3属性box-shadow使用教程

CSS3的box-shadow属性可以让我们轻松实现图层阴影效果。我们来实战详解一下这个属性。 1. box-shadow属性的浏览器兼容性 先来看一个这个属性的浏览器兼容性: Opera: 不知道是从哪个版本开始支持的&#xff0c;我在发这篇文章测试的时候&#xff0c;正好更新了Opera到最新的10.…

mysql 5.7.13 安装配置方法图文教程(linux)

原文出自&#xff1a;http://www.jb51.net/article/87160.htm 1系统约定 安装文件下载目录&#xff1a;/data/software Mysql目录安装位置&#xff1a;/usr/local/mysql 数据库保存位置&#xff1a;/data/mysql 日志保存位置&#xff1a;/data/log/mysql 2下载mysql 在官网&am…

Linux LVM硬盘管理及LVM扩容

原文出自http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写&#xff0c;它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合&#xff0c;相当于一个大硬盘来使用&…

android系统框架()

Android系统框架介绍: 1.大体框架: -src目录: 主要是完成java代码的编写 -assets目录: 资源目录 -res目录: 存储图片,布局文件和字符串,菜单等文件 -bin目录: 输出文件夹,如生成的APK文件 -project.properties: 工程属性文件配置 -gen目录: 系统自动生成的源代码目录 R.java默认…