`

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)。数据源与委托一样都是委托设计模式的具应用,委托对象主要对控件对象的事件和状态变化做出响 应,而数据源对象是为控件对象提供数据。需要注意的是委托中的方法在实现时是可选的,而数据源中的方法一般必须实现。

分享到:
评论

相关推荐

    ios设计模式开发

    本压缩包文件“设计模式学习”显然是一个关于iOS平台设计模式的资料集合,可能包括了代码示例、教程或者案例分析。 1. **单例模式**:在iOS中,单例模式常用于管理全局资源,如网络请求管理者、用户偏好设置、...

    Objective-C编程之道 IOS设计模式解析

    《Objective-C编程之道 iOS设计模式解析》是一本深入探讨Objective-C编程技术和iOS设计模式的专业书籍。本书旨在帮助iOS开发者提升编程技巧,理解并熟练运用设计模式来构建高效、可维护的iOS应用程序。27.7 MB的资源...

    OBJECTIVE-C编程之道 IOS设计模式解析

    本书“Objective-C编程之道:iOS设计模式解析”深入探讨了如何在iOS开发中有效地应用Objective-C语言,以及如何利用设计模式提升代码质量和可维护性。 一、Objective-C基础 Objective-C的基础包括类、对象、消息...

    IOS应用源码Demo-图片拾取器-毕设学习.zip

    5. **MVVM(Model-View-ViewModel)设计模式**:现代iOS开发常采用MVVM来组织代码结构,提高可测试性和可维护性。理解模型、视图和视图模型之间的关系对分析源码大有裨益。 6. **Delegate和Closure**:在图片选择...

    IOS源码应用Demo-ipad上面用的弹出式密码输入面板.zip

    这涉及到 MVC(Model-View-Controller)设计模式的理解,以及委托(Delegate)协议的使用。 最后,这个Demo可能还涉及到动画效果,如淡入淡出、滑动出现等,这些可以通过Core Animation库来实现。学习这部分源码有...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

     《Objective-C编程之道:iOS设计模式解析》适用于那些已经具备Objective-C基础、想利用设计模式来提高软件开发效率的中高级iOS开发人员。第一部分 设计模式初体验第1章 你好,设计模式1.1 这是一本什么书1.2 开始...

    iOS基础开发系列教程

    MVC(Model-View-Controller)架构是iOS开发中的重要设计模式,第十六讲和第十七讲将深入讲解这一概念。Delegate和Protocol在iOS编程中扮演着通信和事件处理的角色,第十八讲对此进行了详细阐述。之后的课程介绍了...

    《iOS6开发指南》精彩书摘

    2. **iOS常用设计模式**:包括单例模式、委托模式、观察者模式和MVC模式。书中解释了这些模式的适用场景、实现原理和具体案例。 3. **UIView与控件**:学习了视图和控件的关系、界面构建层次,以及如何使用标签、...

    ios-纯定义仿网易顶部选择菜单栏.zip

    这可以通过数组存储数据模型,或者使用协议和委托模式来实现。 6. 适配不同屏幕尺寸:为了保证在各种设备上都能良好显示,开发者需要考虑屏幕尺寸和分辨率的差异,可能需要用到Auto Layout或Size Classes进行布局。...

    ios-使用UICollectionView实现柱状图.zip

    总的来说,这个项目涉及了iOS开发中的多个核心知识点,包括UICollectionView的使用、自定义布局、Core Graphics绘图、数据模型设计以及用户交互处理。对于希望提升iOS UI开发技能的开发者来说,这是一个很好的实践...

    ios-标签分组,单选多选.zip

    为了实现这样的功能,开发者需要了解iOS的 MVC(Model-View-Controller)设计模式,以及如何使用Auto Layout来适应不同屏幕尺寸。此外,对响应式编程的理解也很重要,因为用户的选择需要实时反映到界面上。 总的来...

    IOS-UIComboBox

    iOS中的很多控件都遵循数据源(dataSource)和委托(delegate)设计模式。UIComboBox可能也需要这两个协议来获取下拉列表的数据,并处理用户选择事件。数据源方法负责填充下拉列表,委托方法则处理用户的交互。 6....

    Objective-C2.0程序设计习题官方答案

    12. **Model-View-Controller (MVC)**:iOS开发中的主要设计模式,用于分离数据、显示逻辑和用户交互。理解MVC的组成部分及其工作原理。 通过学习和实践这些知识点,并参考"Objective-C2.0程序设计习题官方答案"中...

    ios-Banner轮播图.zip

    8. **代理设计模式(Delegate Design Pattern)**: 为了监听轮播图的事件,如点击图片等,ZHBannerView可能实现了委托协议,开发者可以通过设置代理来接收这些事件的通知。 9. **懒加载(Lazy Loading)**: ...

    iOS7应用开发Machismo(Stanford iOS7)第三节课课堂代码 Swift实现

    3. **Model-View-Controller(MVC)架构**:理解并实现iOS应用的核心设计模式,将业务逻辑(Model)、用户界面(View)和控制器(Controller)分离,保持代码的整洁和可维护性。 4. **Storyboard与ViewController**...

    iOS 4 Programming Cookbook

    - **协议与委托**:探讨协议和委托的设计模式,以及如何通过它们实现对象间的通信。 - **通知中心**:了解如何使用通知中心来实现异步通信。 - **案例分析**:通过示例代码展示如何实现对象之间的简单通信,并...

    ios-侧滑控制器.zip

    在iOS应用开发中,侧滑控制器(Slide Navigation Controller)是一种常见的设计模式,它允许用户通过在屏幕边缘向左或向右滑动来显示一个侧边菜单。这种设计常见于许多移动应用,为用户提供了一个便捷的方式来访问...

    ios-qq好友.zip

    在iOS平台上,与QQ好友相关的开发涉及到多个...这个模块包含了数据模型、网络通信、用户界面设计等多个方面的知识点,是iOS开发中常见的实战案例。开发者可以通过研究这个示例来提升自己在iOS社交应用开发上的技能。

Global site tag (gtag.js) - Google Analytics