首页 文章 精选 留言 我的

精选列表

搜索[delegate],共893篇文章
优秀的个人博客,低调大师

iOS开发-委托(Delegate)浅谈

委托其实并不是OC中才有,C#中也有,不过彼此的理解方式是不一样的,OC中委托是协议的一种,需要使用@protocol声明,委托一般在iOS开发中页面中传值用的比较多。委托是Cocoa中最简单、最灵活的模式之一,委托其实字面上的意思就是将需要的事情委托给别人做,业务场景可以参考主视图和子视图之间的页面关系,或者是视图层和数据层之间的交互。 简单的委托 委托通过@protocol声明,可以定义方法,引用委托的对象,需要实现其方法,方法默认都是@required的,同时可以设置为可选的@optional,首先定义个委托: 1 2 3 4 5 6 7 @protocol BookDelegate < NSObject > @required - ( void )getBookCount; @optional - ( void )optionMethod; @end 这个时候定义书籍Book类和客户Customer类: 1 2 3 4 5 6 7 8 9 @interface Book : NSObject <BookDelegate> @end @interface Customer : NSObject <BookDelegate> @property (assign, nonatomic ) id <BookDelegate> didBookDelegate; @end 实现其中的getBookCount方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @implementation Book - ( void )getBookCount{ NSLog (@ "Book中getBookCount的实现" ); } @end @implementation Customer - ( void )getBookCount{ NSLog (@ "Customer中getBookCount的实现" ); } @end 简单的调用: 1 2 3 4 5 6 7 Book *book=[[Book alloc]init]; Customer *customer=[[Customer alloc]init]; [customer getBookCount]; [book getBookCount]; 上面几行的代码的结果,不用说大家也能看的懂,接下来看接下来的代码,这个时候大家发现用到了开始顶一个的didBookDelegate: 1 2 3 customer.didBookDelegate=book; [customer.didBookDelegate getBookCount]; 上面就是将Book的实例,Book实现了BookDelegate,这个时候可将Book的实例赋值给customer中的变量,将自己的实例化对象委托给了didBookDelegate。 以上是委托使用基本的场景,作为实例化对象book可以自己执行其方法,也可以通过委托将执行过程转移。 页面传值 简单的就是A页面数据可以传值给B页面,B页面可以传值给A页面,简单的两个页面传值,页面参考如下: 都是文本框和按钮,跳转方式选取的时Modal: 第一个页面ViewController的定义: 1 2 3 4 5 6 7 8 9 10 11 12 #import <UIKit/UIKit.h> #import "SecondViewController.h" @interface ViewController : UIViewController<StudySubjectDelegate> @property (strong, nonatomic ) IBOutlet NSString *firstData; @property (weak, nonatomic ) IBOutlet UITextField *subjectName; @end 第二个页面SecondViewController头文件的定义,并且声明了一个委托: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // // SecondViewController.h // Sample // // Created by keso on 15/2/3. // Copyright (c) 2015年 keso. All rights reserved. // #import <UIKit/UIKit.h> @class SecondViewController; @protocol StudySubjectDelegate < NSObject > - ( void )shouldChangeValue:(SecondViewController*)controller; @end @interface SecondViewController : UIViewController @property (assign, nonatomic ) id <StudySubjectDelegate> firstViewDelegate; @property (weak, nonatomic ) IBOutlet NSString *showData; @property (weak, nonatomic ) IBOutlet UITextField *studySubject; @end ViewController.m中的点击事件: 1 2 3 4 5 6 7 8 9 - ( void )prepareForSegue:(UIStoryboardSegue *)segue sender:( id )sender{ if ([segue.identifier isEqualToString:@ "firstEdit" ]) { SecondViewController *controller=segue.destinationViewController; NSLog (@ "%@" , self .subjectName.text); //将自己本身的实例传递给第二个视图 controller.firstViewDelegate= self ; controller.showData= self .subjectName.text; } } 赋值的方式还可以是这样的,其实中的key就是第二个视图定义的属性: 1 2 3 if ([controller respondsToSelector: @selector (setShowData:)]) { [controller setValue: self .subjectName.text forKey:@ "showData" ]; } 第二个页面的点击事件就比较简单了,代码如下: 1 [ self .firstViewDelegate shouldChangeValue: self ]; 上面中其实可以简单的看到oc中的委托就是将自己的实例交给其他对象的成员变量,然后由其成员变量执行实例的工作,的今天不知道为什么有点头疼,说个事情就是最后的第二个页面跳转到一个页面可以接收到值,无法给UITextField赋值,暂时没有搞明白如何才能赋值上去,每次进入就变成了null,有知道可以指点一下,多谢~ 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4271275.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册