swift 协议传值的实现
首先呢说下结构
一个ViewController
一个ModelViewController
在ModelViewController中定义了一个协议
这个逻辑 从第一个界面进入第二个界面 从第二个界面回到第二个界面并通过协议传值回到第一个界面 打印输出值
ModelViewController.swift
protocol lwkDelegate {//定义协议
func changeString(newString:String)
}
在这个ModelViewControler类中实现一些简单的逻辑
class ModelViewController: UIViewController{
var delegate:lwkDelegate?
var btn:UIButton?
override func viewDidLoad() {
super.viewDidLoad()
btn=UIButton(frame:CGRectMake(110,80,100,20))
btn!.backgroundColor=UIColor.grayColor()
btn!.setTitle("传值回第一个界面",forState:.Normal)
//绑定事件
btn!.addTarget(self,action:#selector(ModelViewController.btnOnClick),forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(btn!)
}
func btnOnClick(){
let str:String = "liuweikai"
delegate!.changeString(str)//调用协议方法
self.dismissViewControllerAnimated(true, completion: nil)
}
在ViewController类中
class ViewController: UIViewController,lwkDelegate{//接受协议
var btn:UIButton?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
btn=UIButton(frame:CGRectMake(110,80,100,20))
btn!.backgroundColor=UIColor.greenColor()
btn!.setTitle("去二个界面",forState:.Normal)
//绑定事件
btn!.addTarget(self,action:#selector(ViewController.btnOnClick),forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(btn!)
}
func btnOnClick(){
let vc = ModelViewController()
vc.delegate = self //委托方
self.presentViewController(vc, animated: true, completion: nil)
// self.navigationController?.pushViewController(vc, animated: true)
}
func changeString(newString:String) {//实现协议的方法
print(newString)
}
swift 协议传值的实现的更多相关文章
- 属性传值,协议传值,block传值,单例传值四种界面传值方式
一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N ...
- 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器
1. 协议(Protocol):与OC之间唯一不同的是Swift中的协议不管是属性还时方法全部是必须实现的 /** protocol*/ protocol FullNamed { /** 计算属性申明 ...
- Controller之间传递数据:协议传值
http://itjoy.org/?p=416 前边介绍过从第一个页面传递数据到第二个页面,那么反过来呢我们该如何操作?还是同一个例子,将第二个页面的字符串传递到第一个页面显示出来,这中形式就可以使用 ...
- Swift协议(Protocol)
协议是为方法.属性等定义一套规范,没有具体的实现. 协议能够被类.结构体等具体实现(或遵守). protocol SomeProtocol { // protocoldefinition goes h ...
- swift闭包传值
不知道原理,就知道这么用的,皮毛上的那一点. 寻思着把以前的项目改成swift的,结果了,,, 反向传值 一. //类似于OC中的typedef typealias sendValueClosure= ...
- 学习Swift -- 协议(上)
协议(上) 协议是Swift非常重要的部分,协议规定了用来实现某一特定工作或者功能所必需的方法和属性.类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能.任意能够满足协议要求 ...
- Swift - 协议(protocol)
1,Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方法名.返回值.参数等信息,而没有具体的方法实现. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Swift协议+代理
Swift语言开发中使用协议+代理的用法和oc中是一样的,只不过变得是语法.现在就进入swift的协议+代理. 先上个图,看看我们要实现的效果: 首先是第一个页面,然后点击到第二个页面,最后点击返回 ...
- Swift协议
「协议」(protocol)声明一系列方法.属性.下标等用来约束其「遵循者」,进而保证「遵循者」能够完成限定的工作.「协议」本身不实现任何功能,它仅仅描述了「遵循者」的实现.「协议」能被类.结构体.枚 ...
随机推荐
- int main(int argc,char *argv[])参数的应用
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/sta ...
- L11,one good turn deserves another
one good turn deserves another 礼尚往来 gets a good salary 有一份很好的薪水 never pays it back 从不归还 deserve 应得的 ...
- EasyUi中的datagird中a标签的click事件无法触发?(已解决)
***************************2015-10-29 21:07************************* 问题如下: datagrid最后一列编辑中有如下a标签 { f ...
- iOS之UITableView的上拉刷新
#import "ViewController.h" #import "UITableView+PullRefresh.h" @interface ViewCo ...
- Xcode8 去除系统日志输出
Edit Scheme-> Run -> Arguments, 在Environment Variables里边添加 OS_ACTIVITY_MODE = disable
- html背景图片拉伸至全屏
本来想在body的css中设置,但发现怎么弄也无法搞定,技术水平有限吧,最后通过下面方式来达到效果: <img src = 'url' border = '0' width = '100%' h ...
- Laravel 目录结构分析
根目录结构 /app/bootstrap/public/vendorartisancomposer.jsonserver.php 1./app 整个Laravel 目录中最需要我们注意的地方,包含设置 ...
- Leetcode题1
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- 苹果App Store开发者帐户从申请,验证,到发布应用(1)
app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...
- bzoj2628: JZPSTR
Description 问题描述 你要对一个字符串进行三种操作: 0. 在位置x_i处插入一个字符串y_i 1. 删除位置[x_i, y_i)的字符串 2. 查询位置[x_i, y_i)的字符串包含多 ...