这个代理传值是经常使用的一种传值方式,下面介绍一种View 和 Controller 之间的代理传值方法。

先建立一个View视图

如 LoginView 是继承于一个UIView

在LoginView.h里面声明协议

LoginView.h文件

   #import <UIKit/UIKit.h>

@class LoginView;

//1.声明协议

@protocol LoginViewDelegate

@optional//可选的

  • (void)sureButtonTaped:(LoginView *)loginView info:(NSString *)info;

    @end

    @interface LoginView : UIView

    //2.声明delegate属性

    @property (nonatomic,assign) id delegate;

    @end

在LoginView.m 有一个textField,一个button,点击button,将textField里面的值传入Controller里面。

LoginView.m文件

import "LoginView.h"

@interface LoginView ()

@property (nonatomic,strong)UITextField *textField;

@property (nonatomic,strong) UIButton *button;

@end

@implementation LoginView

  • (instancetype)initWithFrame:(CGRect)frame

    {

    self = [super initWithFrame:frame];

    if (self) {

    self.backgroundColor = [UIColor yellowColor];

      [self setUp];

    }

    return self;

    }

  • (void)setUp{

    _textField = [[UITextField alloc] init];

    _textField.bounds = CGRectMake(0, 0, CGRectGetWidth(self.bounds) * 0.7, 40);

    _textField.center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds) - 100);

    _textField.tintColor = [UIColor redColor];

    _textField.borderStyle = UITextBorderStyleLine;

    _textField.keyboardType = UIKeyboardTypeASCIICapable;

    _textField.placeholder = @"请输入文字";

    _textField.clearButtonMode = UITextFieldViewModeWhileEditing;

    [self addSubview:_textField];

    _button = [UIButton buttonWithType:UIButtonTypeSystem];

    _button.frame = CGRectMake(120, 280, 80, 30);

    [_button setTitle:@"登陆" forState:UIControlStateNormal];

    [_button addTarget:self action:@selector(buttonTaped:) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:_button];

}

  • (void)buttonTaped:(UIButton *)sender

    {

    //调用协议方法

    [_delegate sureButtonTaped:self info:_textField.text];

}

在这里我们用于接收的视图就用一开始的ViewController,你也可以传入你想要传入的视图

ViewController.h文件

import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

ViewController.m文件

#import "ViewController.h"

#import "LoginView.h"

//引入协议

@interface ViewController ()

@end

@implementation ViewController

  • (void)viewDidLoad {

    [super viewDidLoad];

    LoginView *login = [[LoginView alloc]initWithFrame:CGRectMake(20, 200, 375-40, 350)];

    //1.设置代理

    login.delegate = self;

    [self.view addSubview:login];

}

#pragma mark -- LoginViewDelegate

//3.实现协议方法

  • (void)sureButtonTaped:(LoginView *)loginView info:(NSString *)info

    {

    NSLog(@"%@",info);

}

  • (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }

@end

总结:代理加方法的传值是一种很好的传值方式,我们可以将自己要传入的值写进方法里面,打包传入,方便快捷。。

View 与 Controller 之间的delegate(代理)传值的更多相关文章

  1. 【MVC架构】——怎样利用Json在View和Controller之间传递数据

    在MVC架构中,尽管非常多东西和三层非常相似,可是也有非常大的差别.就比方传递数据.在三层架构中,传递数据就仅仅要一层返回,另外一层用同样类型的变量来接收即可了.在MVC中,事实上原理是一样的,Con ...

  2. 【MVC框架】——View和Controller之间的传值

    在MVC中,Controller运行一个能够说是路由功能.它通过View传过来的数据,来决定应该调用哪一个Model,相同会把Model处理完的数据传给View,所以就总是涉及到Controller和 ...

  3. 【ASP.NET MVC】View与Controller之间传递数据

    1   概述 本篇文章主要从操作上简要分析Controller<=>View之间相互传值,关于页面之间传值,如果感兴趣,可参考我另外一篇文章ASP.NET 页面之间传值的几种方式 . Co ...

  4. MVC进阶学习--View和Controller之间的数据传递(二)

    1. 使用Request.Form MVC 将页面简单化,与WebForm中的事件机制完全不同,就和普通的html标签表单提交没有任何区别(当然WebForm中的事件机制其实也是表单提交).在表单提交 ...

  5. spring mvc controller接收请求值及controller之间跳转及传值

    spring接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...

  6. MVC进阶学习--View和Controller之间的数据传递(一)

    1.使用ViewData ViewData 的是ControllerBase 的一个属性,是一个数据字典类型的,其实现代码如(这段代码来自asp.net MVC开源项目中源码)下: Code   1  ...

  7. AngularJS in Action读书笔记2——view和controller的那些事儿

    今天我们来818<angularjs in action>的第三章controller和view. 1.Big Picture概览图 View是angularjs编译html后呈现出来的, ...

  8. view向controller提交列表

    第一次将view中列表提交到controller,尝试了下,还是可以的 要传输的实体类 /// <summary> /// 用于展示的角色类 /// </summary> pu ...

  9. ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller

    ASP.NET MVC中的Model(数据模型)主要包括定义数据结构.数据库读写.数据验证等等和对象处理相关的工作. 在解决方案资源管理器中找到Model文件夹,点击右键,添加一个新类,名为“Mess ...

随机推荐

  1. AM335x tscadc platform driver 相关代码跟踪

    TI AM335x ti am335x_tsc.c 代码跟踪 在kernel 首层目录: 先运行make ARCH=arm tags 这个作用是建立tags文件,只含有arm架构的,利用ctag即可进 ...

  2. LaTeX简单使用方法

    Content LaTeX的用途 LaTeX文件布局 LaTeX的文档格式 公式环境 图的排版 表格的排版 有序列表和无序列表 引用 伪代码 参考文献 LaTeX的用途 LaTeX是一种基于TeX的排 ...

  3. powershell使用

    主要语法点: -match -notmatch -replace -join -split -and -or -xor -not ! +.-.*./.% =.+=.-=.*=./=.%= -eq.-n ...

  4. (一)Netty源码学习笔记之概念解读

    尊重原创,转载注明出处,原文地址:http://www.cnblogs.com/cishengchongyan/p/6121065.html  博主最近在做网络相关的项目,因此有契机学习netty,先 ...

  5. Demo中的IOC自定义实现

    在做练习的时候,小小项目,使用IOC控件觉得麻烦,使用工厂觉得不高大上啊,自己写个简陋的依赖注入IOC吧; 控制反转(IOC)是管理映射依赖的的,是依赖倒置(DIP)的实现方式; 依赖倒置(DIP)是 ...

  6. 【jQuery】--图片轮播

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. SVN本地代码未提交而被覆盖

    本地代码未提交而不小心被覆盖了,肿么办... 到回收站找到你的文件 xxx.mine,代码就可以找回来了.如果回收站没有了,那就没办法了. ---- 失而复得的感觉真好!

  8. sql server报:名称 不是有效的标识符

    可能出现的几种情况: 1.执行sql提示 名称***不是有效的标识符 --添加括号 sql exec(sql) 注意exec的时候要到括号 exec  (@sql) 2.sql中的单引号嵌套采用两个单 ...

  9. OE学习笔记流水

    Terrain.cpp中的getWorldCoordsUnderMouse函数,进行标记.

  10. wpf 悬浮窗口的实现

    又到了写点东西的时候,因为有了新的收获,所以用随笔来记录下自己的成长.话不多说,正入主题. 最近又遇到一个新的需求,有一组控件,需要悬浮显示在面板的边缘上,刚开始的时候,是不显示的,点击后显示,然后再 ...