在iOS中传值简单说就是把一个视图控制器上的控件内容传送到另一个视图控制器控件上,并使其显示.
传值的方法有许多种:属性,方法,协议(本质是targetAction),targetAction,本地存储,单例(针对内存),消息传值(本质是单例).
今天的这篇只说两种:属性与方法
首先创建2个ViewController:MainViewController,SecondViewController
MainViewController中,创建一个button和一个文本输入框TextField
SecondViewController中,创建一个label
我们要实现的是MainViewController中在TexrField输入文本点击button,使文本显示在SecondViewContrller中的label上
MainViewController中:先把TextField定义成属性(名字叫tf)
创建完TextField和button不要忘记在viewDidLoad方法中调用下此方法:[self addsubviews];否则什么都不会出现的
在给button添加点击事件
在这我要特别说明下,也是我们在开发中最需要注意的一个问题.我先说下什么是懒人加载: 所谓的懒人加载就是:在你需要用到视图的时候才会创建视图.待我把mainViewContoller和SecondViewController视图铺好并且实现传值功能之后的时候,你可以把我注释掉得地方恢复下,再运行程序,你会发现:我们要传的TextField上面的值并没有传到第二个页面.为什么呢?我会在最后具体说.
SecondViewController.h中:
SecondViewController.m中:UILabel设置成属性(这个Label上的文本就要显示mainVC中的TextFiled的内容)
完成传值功能之后,回到我注释的地方,为什么在那个地方给SecondViewController对象的view赋值完颜色,值就传不过去了呢?要解释这个问题我就先说下ViewController也就视图控制器的执行流程,如果你在我注释的地方设置个断点,它会先调用initWithNibName方法(指派初始化,只要是init就会调用该犯法),在调用viewload方法,最后调用viewDidload方法.现在我们就好理解我注释的地方了,在执行设置view的背景([scond setBackgroundColor])语句时,secondViewcontroller就加载了视图,运行了self.label.text = self.secondText;但是secondText的值还没从TextFiled传过来,然后才执行了MainVC.m的second.secondText = self.tf.label;总结一句话就是secondText在为空得时候就赋值到了label,然后secondText传来了TextField的值.