(一)属性传值

(二)代理(委托)传值


代理传值
适用于 反向传值 (从后往前传)
1.1 创建协议 及协议方法 在反向传值的页面(SecondViewController)中
1.2 创建协议类型的属性 在SecondViewController中创建属性id<postValueDelegate> delegate
1.3 调用属性 即delegate
在SecondViewController页面中 对象传值的方法中调用
[self.delegate postValue:self.textName.text];
1.4 在第一页 即显示修改过信息的页面
遵循协议 实现协议方法 指定代理对象(即 在页面传值参数的方法中为代理赋值)
secondVc.delegate=self;

文件目录:

FirstViewController.h

#import <UIKit/UIKit.h>
#import "SecondViewController.h"
@interface FirstViewController : UIViewController<UITextFieldDelegate,postValue> @property(strong,nonatomic) UITextField *textName;
@property(strong,nonatomic) UIButton *nextbutton; @end

FirstViewController.m

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor redColor];
self.textName=[[UITextField alloc] initWithFrame:CGRectMake(, , ,)];
self.textName.borderStyle=UITextBorderStyleLine;
self.textName.delegate=self;
[self.view addSubview:self.textName]; self.nextbutton=[[UIButton alloc] initWithFrame:CGRectMake(, , , )];
[self.nextbutton setTitle:@"下一页" forState:UIControlStateNormal];
self.nextbutton.backgroundColor=[UIColor grayColor];
[self.nextbutton addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.nextbutton]; } -(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ([textField isFirstResponder]) {
[textField resignFirstResponder];
} return YES;
} -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.textName resignFirstResponder];
} -(void)nextPage
{
SecondViewController *secondVc=[[SecondViewController alloc] init];
secondVc.str=self.textName.text;
secondVc.deletage=self;
[self presentViewController:secondVc animated:YES completion:nil];
} -(void)postValue:(NSString *)str
{
self.textName.text=str;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

SecondViewController.h

#import <UIKit/UIKit.h>

// 创建协议

@protocol postValue <NSObject>

-(void)postValue:(NSString *)str;

@end

@interface SecondViewController : UIViewController<UITextFieldDelegate>

@property(strong,nonatomic) UITextField *textInfo;
@property(strong,nonatomic) UIButton *backbutton;
@property(strong,nonatomic) NSString *str; @property(strong,nonatomic) id<postValue> deletage; @end

SecondViewController.m

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor colorWithRed:0.541 green:0.878 blue:0.831 alpha:1.000]; self.textInfo=[[UITextField alloc] initWithFrame:CGRectMake(, , , )];
self.textInfo.borderStyle=UITextBorderStyleLine;
self.textInfo.text=self.str;
self.textInfo.delegate=self; [self.view addSubview:self.textInfo]; self.backbutton=[[UIButton alloc] initWithFrame:CGRectMake(, , , )];
[self.backbutton setTitle:@"上一页" forState:UIControlStateNormal];
self.textInfo.text=self.str;
[self.backbutton addTarget:self action:@selector(backPage) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.backbutton]; } -(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ([textField isFirstResponder]) {
[textField resignFirstResponder];
} return YES;
} -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.textInfo resignFirstResponder];
} -(void)backPage
{
if (self.deletage!=) {
[self.deletage postValue:self.textInfo.text];
} [self dismissViewControllerAnimated:YES completion:nil];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

AppDelegate.h

#import <UIKit/UIKit.h>
#import"FirstViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end

AppDelegate.m

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
FirstViewController *firstVc=[[FirstViewController alloc] init]; self.window.rootViewController=firstVc; return YES;
}
.......

@end

(三)代码块传值

(四)通知传值

(五)单例传值

iOS--页面间的代理传值(属性、代理(委托)、代码块、单例、通知)的更多相关文章

  1. iOS 页面间几种传值方式(属性,代理,block,单例,通知)

    第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...

  2. iOS 页面间传值 之 属性传值,代理传值

    手机 APP 运行,不同页面间传值是必不可少,传值的方式有很多(方法传值,属性传值,代理传值,单例传值) ,这里主要总结下属性传值和代理传值. 属性传值:属性传值是最简单,也是最常见的一种传值方式,但 ...

  3. iOS 页面间传值 之 单例传值 , block 传值

    ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同 ...

  4. iOS页面间传值的方式 (Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)   iOS页面间传值的方式(NSUserDefault/Delegate/NSN ...

  5. iOS页面间传值的六种方式

    一般ios页面间的传值方式分为6种:1.属性传值:2.block:3.delegate:4.UserDefault:5.单例:6.通知. 0&1.block 先说我最常用的block吧,属性传 ...

  6. iOS页面间传值的五种方式总结(Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例) iOS页面间传值的方式(NSUserDefault/Delegate/NSNot ...

  7. iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值实现方法:1.通过设置属性,实现页面间传值:2.委托delegate方式:3.通知notification方式:4.block方式:5.UserDefault或者文件方式:6.单例模式 ...

  8. iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例)

    iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...

  9. 【转】iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)-- 不错

    原文网址:http://www.cnblogs.com/JuneWang/p/3850859.html iOS页面间传值的方式(NSUserDefault/Delegate/NSNotificatio ...

  10. ios页面间传递参数四种方式

    ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...

随机推荐

  1. MySQL批量SQL插入性能优化

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. ...

  2. webpack+vue-loader 在单独.vue组件中使用sass-loader编译sass报错问题not a valid Win32 applictation

        如果webpack配置没有问题,在vue文件中编译sass/scss报上面的错误,大概是由于node-sass安装失败,重新卸载安装,   在国内安装node-sass失败的话,可以使用淘宝镜 ...

  3. Alwayson+Replication

    本文将介绍如何实现Alwayson + Replication ,通过AlwaysOn实现Publication database的高可用性,使Publication database在failove ...

  4. ruby -- 问题解决(一)无法连接mysql数据库

     >rails g controller home index  运行该命令时无法连接mysql 先下载配置文件:mysql-connector-c-noinstall-6.0.2-win32. ...

  5. 前端技术Bootstrap的hello world

    ----对于用户来说,界面就是程序本身.那么一个漂亮的web一定是你继续使用这个应用的前题. 这一节我们来一起写个Bootstrap的hello wrold. Bootstrap Bootstrap  ...

  6. BackgroundCheck – 根据图片亮度智能切换元素样式

    BackgroundCheck 是一个轻量的 JavaScript 库,能够根据元素后面的图片的亮度自动切换元素样式.例如在图片幻灯片功能中,根据图片亮度调整导航箭头的颜色,这样让图片和导航的颜色形成 ...

  7. 深入浅出 JavaScript 中的 this

    在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象.一般在编译期确定下来,或称为编译期绑定.而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的 ...

  8. JAVA魔法堂:读取.properties配置文件

    一.前言 Java工程中想log4j.数据库连接等配置信息一般都写在.properties文件中,那么如何读取这些配置信息呢?下面把相关方法记录下来供以后查阅. 二..properties文件 配置文 ...

  9. 复利程序(c语言)(张俊毅 周修文)

    因为之前发烧一直没有了解这个 所以最近才补上 分数扣了就扣了 补上先 单元测试迟点更 #include<stdio.h> #include <math.h> #include ...

  10. 【WinRT】国内外 Windows 应用商店应用开发者博客收集

    本文格式:博主名 博客链接 本人点评.排名不分先后. 中文: 博客园: webabcd http://www.cnblogs.com/webabcd/ 微软最有价值专家(MVP),他做的 Win8.1 ...