书接上回,应用案例
我们以UITextFieldDelegate为例来说明一下委托的使用。 UITextFieldDelegate是控件UITextField的 委托,控件的委托主要负责响应控件事件或控制其他对象。除了UITextField,WebView、UITableView等控件也有相应的委托对象。
打开UITextFieldDelegate的API文档,其中有4个有关编辑的方法,还要3个其它方法。
这里我们在编辑过程中消息的发送,UITextField编辑过程中与UITextFieldDelegate委托对象之间交互过程。
在 文本框编辑开始前后会发出消息textFieldShouldBeginEditing:和 textFieldDidBeginEditing:,编辑结束前后会发出消息textFieldShouldEndEditing:和 textFieldDidEndEditing:。
为了演示文本框编辑前后发生了什么,我们需要编写一个简单的文本框工程,画面中只有一个文本框。
我们在视图控制器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上松开鼠标。
这样运行代码,当触摸文本框使其处于编辑状态时,在日志中会输出:
call textFieldShouldBeginEditing:
call textFieldDidBeginEditing:
输入完成点击“return”键关闭键盘,结束编辑状态,日志中输出:
call textFieldShouldReturn:
call textFieldShouldEndEditing:
call textFieldDidEndEditing:
textFieldShouldReturn:是点击“return”键发出的消息。我们借助于该消息通过[textField resignFirstResponder]方法关闭键盘。
更 复杂的控件(如UITableView)除了委托协议(UITableViewDelegate)还有 数据源协议(UITableViewDataSource)。数据源与委托一样都是委托设计模式的具应用,委托对象主要对控件对象的事件和状态变化做出响 应,而数据源对象是为控件对象提供数据。需要注意的是委托中的方法在实现时是可选的,而数据源中的方法一般必须实现。
相关推荐
本压缩包文件“设计模式学习”显然是一个关于iOS平台设计模式的资料集合,可能包括了代码示例、教程或者案例分析。 1. **单例模式**:在iOS中,单例模式常用于管理全局资源,如网络请求管理者、用户偏好设置、...
《Objective-C编程之道 iOS设计模式解析》是一本深入探讨Objective-C编程技术和iOS设计模式的专业书籍。本书旨在帮助iOS开发者提升编程技巧,理解并熟练运用设计模式来构建高效、可维护的iOS应用程序。27.7 MB的资源...
本书“Objective-C编程之道:iOS设计模式解析”深入探讨了如何在iOS开发中有效地应用Objective-C语言,以及如何利用设计模式提升代码质量和可维护性。 一、Objective-C基础 Objective-C的基础包括类、对象、消息...
5. **MVVM(Model-View-ViewModel)设计模式**:现代iOS开发常采用MVVM来组织代码结构,提高可测试性和可维护性。理解模型、视图和视图模型之间的关系对分析源码大有裨益。 6. **Delegate和Closure**:在图片选择...
这涉及到 MVC(Model-View-Controller)设计模式的理解,以及委托(Delegate)协议的使用。 最后,这个Demo可能还涉及到动画效果,如淡入淡出、滑动出现等,这些可以通过Core Animation库来实现。学习这部分源码有...
《Objective-C编程之道:iOS设计模式解析》适用于那些已经具备Objective-C基础、想利用设计模式来提高软件开发效率的中高级iOS开发人员。第一部分 设计模式初体验第1章 你好,设计模式1.1 这是一本什么书1.2 开始...
MVC(Model-View-Controller)架构是iOS开发中的重要设计模式,第十六讲和第十七讲将深入讲解这一概念。Delegate和Protocol在iOS编程中扮演着通信和事件处理的角色,第十八讲对此进行了详细阐述。之后的课程介绍了...
2. **iOS常用设计模式**:包括单例模式、委托模式、观察者模式和MVC模式。书中解释了这些模式的适用场景、实现原理和具体案例。 3. **UIView与控件**:学习了视图和控件的关系、界面构建层次,以及如何使用标签、...
这可以通过数组存储数据模型,或者使用协议和委托模式来实现。 6. 适配不同屏幕尺寸:为了保证在各种设备上都能良好显示,开发者需要考虑屏幕尺寸和分辨率的差异,可能需要用到Auto Layout或Size Classes进行布局。...
总的来说,这个项目涉及了iOS开发中的多个核心知识点,包括UICollectionView的使用、自定义布局、Core Graphics绘图、数据模型设计以及用户交互处理。对于希望提升iOS UI开发技能的开发者来说,这是一个很好的实践...
为了实现这样的功能,开发者需要了解iOS的 MVC(Model-View-Controller)设计模式,以及如何使用Auto Layout来适应不同屏幕尺寸。此外,对响应式编程的理解也很重要,因为用户的选择需要实时反映到界面上。 总的来...
iOS中的很多控件都遵循数据源(dataSource)和委托(delegate)设计模式。UIComboBox可能也需要这两个协议来获取下拉列表的数据,并处理用户选择事件。数据源方法负责填充下拉列表,委托方法则处理用户的交互。 6....
12. **Model-View-Controller (MVC)**:iOS开发中的主要设计模式,用于分离数据、显示逻辑和用户交互。理解MVC的组成部分及其工作原理。 通过学习和实践这些知识点,并参考"Objective-C2.0程序设计习题官方答案"中...
8. **代理设计模式(Delegate Design Pattern)**: 为了监听轮播图的事件,如点击图片等,ZHBannerView可能实现了委托协议,开发者可以通过设置代理来接收这些事件的通知。 9. **懒加载(Lazy Loading)**: ...
3. **Model-View-Controller(MVC)架构**:理解并实现iOS应用的核心设计模式,将业务逻辑(Model)、用户界面(View)和控制器(Controller)分离,保持代码的整洁和可维护性。 4. **Storyboard与ViewController**...
- **协议与委托**:探讨协议和委托的设计模式,以及如何通过它们实现对象间的通信。 - **通知中心**:了解如何使用通知中心来实现异步通信。 - **案例分析**:通过示例代码展示如何实现对象之间的简单通信,并...
在iOS应用开发中,侧滑控制器(Slide Navigation Controller)是一种常见的设计模式,它允许用户通过在屏幕边缘向左或向右滑动来显示一个侧边菜单。这种设计常见于许多移动应用,为用户提供了一个便捷的方式来访问...
在iOS平台上,与QQ好友相关的开发涉及到多个...这个模块包含了数据模型、网络通信、用户界面设计等多个方面的知识点,是iOS开发中常见的实战案例。开发者可以通过研究这个示例来提升自己在iOS社交应用开发上的技能。