iOS 开发之协议-代理传值

来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 21:59 点击:

刚开始做iOS开发的时候,对 protocol、delegate 的理解一直都是晕晕乎乎一知半解的状态,不知道两个UIViewController之间怎么进行传值。

面试过几个童鞋,问道怎么用 delegate 对 两个 UIViewController 进行传值的时候,回答的都是模棱两可的。今天又有童鞋问我这个问题,所以干脆写个blog说明一下。

1、协议(protocol),就是使用了这个协议后,必须按照协议规定的内容来处理事情,协议中要求的方法必须实现(@optional的方法除外)。

protocol是一种语法,它提供了一个很方便的、实现delegate模式的机会。

定义protocol


@protocol ClassBDelegate<NSObject>

- (void)methodOne;
@optional
- (void)methodTwo:(NSString *)value;

@end

定义了一个ClassB的协议,这个协议中包含两个方法,其中methodTwo为可选的。

在ClassA的头文件(ClassA.h)中实现这个协议,

@interface ClassA<ClassBDelegate>

@end

在ClassA的实现文件(ClassA.m)中实现ClassBDelegate的两个方法,其中methodTwo可以不实现


- (void)methodOne{
    // 具体实现内容
   
}

- (void)methodTwo:(NSString *)value{
    // 具体实现内容 
}

2、代理(delegate),顾名思义就是委托别人办事,当一件事情发生后,自己不处理,让别人来处理。

delegate和protocol没有关系。delegate本身是一种设计模式。是把一个类自己需要做的一部分事情,让另一个类(也可以就是自己本身)来完成。

在ClassB的头文件(ClassB.h)中定义一个代理

@interface ClassB

@property (nonatomic, unsafe_unretained) id<ClassBDelegate> delegate;

@end

这样,当我们在ClassB的实现文件(ClassB.m)中遇到想让别的类(如 ClassA)处理的问题时,就可以这样

[self.delegate methodOne];

[self.delegate methodTwo:@"需要传递的值"];3、上边简单的介绍了一下协议与代理,现在开始讲两个UIViewController之间怎么进行传值的事例。

首先启动Xcode,从菜单选择file-New Project...,

 

 

选择Single View Application,然后点击 Next,

 

  a、给工程取个名称为 DelegateByValue;

  b、下边的组织名称写自己所在的组织,这里写的是我个人的名称;

  c、公司标识分为两部分,com也就是Company(公司)的意思,iostour写自己所在的公司名称,这里我写的是iOS之旅的iostour;

  d、类前缀,这个可以随便,不过我这里写的是W,因为我姓卫,所以取其首字母,这样公司同事一看到这个类就知道是我写的;

  e、设备选择iPhone;

  f、我们用xib的方式编写,故此处不勾选;

  g、使用ARC机制,勾选;

  h、该事例不做单元测试,不勾选。

然后单击 Next,

 

选择一个存储工程的目录,然后单击 Create创建一个工程,创建完成后的目录结构

 

接下来我们需要在两个Controller之间进行传值,由于创建工程的时候已经自动为我们生成了一个WViewController,所以我们只需要在创建一个就Controller就好啦。

鼠标右键DelegateByValue,点击New File...  

 

 

 

选择iOS>Cocoa Touch >Objective-C Class,然后单击 Next,

 

然后,取名为WTwoViewController,单击 Next,选择存储目录,然后Create。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • UITableView一些方法
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1