iOS之页面传值

页面之间的传值方式

设有firstView和secondView两个视图

属性传值(适用于页面之间的正向传值)

1、在要显示信息的页面,创建属性

2、在要传值的页面,设置属性值

3、在显示信息的页面的ViewdidLoad方法中,接收属性值

代理传值(适用于页面之间的反向传值)

1、创建协议及协议方法,在反向传值的页面(secondVC)中

2、创建协议类型的属性,   在secondVC中创建属性

3、调用属性  即delegate,在secondVC页面中的对象传值的方法中调用[self.delegate   postValue:self.textName.text];

4、在第一页,即显示修改过信息的页面遵循协议,实现协议的方法,指定代理(即在页面传递参数的方法中为代理赋值)

second.delegate=self;

代码块传值(适用于反向传值)

1、声明一个代码块(second###)

2、声明一个代码块类型的属性(second###)

3、调用代码块(second###)

3、实现代码块(first###)

ViewController.h

//声明一个文本框和一个按钮

@property(strong,nonatomic)UITextField *textName;

@property(strong,nonatomic)UIButton *button;

ViewController.m

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

self.textName=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 150, 40)];

self.textName.borderStyle=1;

self.button=[[UIButton alloc] initWithFrame:CGRectMake(100, 200, 100, 40)];

self.button.backgroundColor=[UIColor redColor];

[self.button setTitle:@"按钮" forState:UIControlStateNormal];

[self.button addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:self.textName];

[self.view addSubview:self.button];

//指定代理

//    self.textName.delegate=self;

}

-(void)nextPage

{

secondViewController *second=[[secondViewController alloc] init];

second.str=self.textName.text;

//代理

//    second.delegate=self;

second.myblock=^(NSString *str)

{

self.textName.text=str;

};

[self presentViewController:second animated:YES completion:^{

NSLog(@"转到下一页");

}];

}

//协议方法的实现

-(void)postValue:(NSString *)value

{

self.textName.text=value;

}

secondViewController.h

typedef void(^ValueBlock)(NSString *str);

//代理传值中的协议

@protocol postValueDelegate <NSObject>

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

@end

//遵循协议

@interface secondViewController : UIViewController<UITextFieldDelegate>

@property(strong,nonatomic)NSString *str;

@property(strong,nonatomic)UITextField *txt2;

@property(strong,nonatomic)UIButton *button2;

//用协议定义的一个属性

@property(strong,nonatomic)id<postValueDelegate> delegate;

//代码块定义的一个属性

@property(strong,nonatomic)ValueBlock myblock;

secondViewController.m

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

self.view.backgroundColor=[UIColor grayColor];

self.txt2=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 150, 40)];

self.txt2.borderStyle=1;

[self.view addSubview:self.txt2];

//    self.button2=[[UIButton alloc] initWithFrame:CGRectMake(100, 200, 100, 40)];

//    [self.button2 setTitle:@"返回" forState:UIControlStateNormal];

//    [self.button2 addTarget:self action:@selector(backPage) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:self.button2];

//属性传值

self.txt2.text=self.str;

NSLog(@"str=%@",self.str);

self.txt2.delegate=self;

}

//-(void)backPage

//{

//    //代理传值

//    if (self.delegate)

//    {

//        [self.delegate postValue:self.txt2.text];

//    }

//

//

//    [self dismissViewControllerAnimated:YES completion:^{

//        NSLog(@"返回");

//    }];

//}

-(BOOL)textFieldShouldReturn:(UITextField *)textField

{

//代码块传值

if (self.myblock)

{

self.myblock(textField.text);

}

if ([textField isFirstResponder])

{

[textField resignFirstResponder];

}

[self dismissViewControllerAnimated:YES completion:^{

NSLog(@"返回");

}];

return YES;

}

除了上面三种传值方式,还有单例传值,通知传值,更新中......

时间: 2025-01-16 12:05:02

iOS之页面传值的相关文章

iOS开发—页面传值汇总

1.委托delegate方式: 2.通知notification方式: 3.block方式: 4.UserDefault或者文件方式: 5.单例模式方式: 6.通过设置属性,实现页面间传值 情况1:A页面跳转到B页面 方法: 在B页面的控制器中,编写对应的属性,在A页面跳转到B页面的地方,给B的属性赋值即可 //SecondViewController.h @property(nonatomic) NSInteger flag;//当前系统标示(0:其他传值方式:1:block传值方式) 在A页

iOS 委托 页面之间传递数值

ios的页面传值方法很多,本博客主要是 通过委托模式 来传值. 将一个页面中时间选择器的值传递到另外一个页面 主要包括三个模块 第一:A类 第二:委托协议 第三:B类 首先定义个一委托UIViewPassValueDelegate用来传递值 @protocol ViewPassValueDelegate <NSObject> -(void) passValue :( NSString *) value; @end 在A类中声明 委托,并且实现这个委托 @property (nonatomic,

ios 页面传值

今天看了一下ios 页面传值的方式大致分为四种: 代理delegate block 通知 单例class 今天试了一下前三种,在这里记录一下 下面示例是有两个页面,每个页面都有一个按钮Button,点击第一个页面的按钮回调到第二个页面,再点击第二个页面回跳转道第一个页面,第一个按钮的标题变为第二个按钮传回的值. 代理delegate 代理似乎是我的心结,能用API 但是就是不会自己写,这也是今天会写传值的原因. 假设两个页面传值,协议类应该写在哪,代理应该定义在那个页面? 总结的时候我觉得可以这

iOS 页面传值的几种方式之NSNotificationCenter传值

接着上回说的iOS页面传值问题 传送门---------->iOS页面传值之代理传值 接下来我们说说NSNotificationCenter传值方式 在开始之前,我们首先得知道KVO模式 Key-Value Observing (KVO) 键值监听 就是说当你告诉通知中心一个Key 他会根据Value的变化做些事情,或者是获取一些数据 说上千回,不如用上一回. 我们在B控制器发送一个监听 [[NSNotificationCenter defaultCenter] postNotification

IOS 委托代理(delegate)实现页面传值

LvesLi原创,转载请注明原文链接谢谢  http://www.androiddev.net/lvesli_delegate/  委托是指给一个对象提供机会对另一对象中的变化做出反应或者相应另一个对象的行为.其基本思想是协同解决问题. 在程序中:一般情况下 1.委托需要做的工作有: 1.1定义协议与方法 1.2声明委托变量 1.3设置代理 1.4通过委托变量调用委托方法 2.代理需要做的工作有: 2.1遵循协议 2.2实现委托方法 下面讲解一下使用委托实现页面传值的解决方法: 加入我们有两个V

ios学习(界面传值的方法)

ios(学习)界面传值的方法 block: 实现界面传值的方法1.block: 实现界面传值,都是从第二个界面向第一个界面传值:第一种block 首先).在第二个界面secondViewController声明set方法 声明block @property (nonatomic,copy) void(^change)(UIColor *color); 其次).在.m文件实现 实现block的方法 _callback([UIColor redColor]);//注意这里之所以是_callback的

在uwp仿IOS的页面切换效果

有时候我们需要编写一些迎合IOS用户使用习惯的uwp应用,我在这里整理一下仿IOS页面切换效果的代码. 先分析IOS的页面切换.用户使用左右滑动方式进行前进和后退,播放类似于FlipView的切换动画.导航到新页面时,使用页面前进的动画. UWP自带很多切换效果,位于 Windows.UI.Xaml.Media.Animation 中.与苹果的切换效果最接近的是 PaneThemeTransition (而不是EdgeUIThemeTransition). PaneThemeTransition

05-19Web端控件,页面传值

一.记忆Web端控件需要配合HTML 中的Form表单元素 1.Label 会被编译成span标签 属性: Text:文本内容 CssClass:CSS样式 Enlabled:是否可用 Visible:是否可见 2.Literal 空的,C#会把里面的Text内容直接作为网页代码传过去,比如Text里面写上<input type="button" />会直接在网页中插入一个按钮 属性: Text:内容 文本类 文本框      <input type="te

Web端控件,页面传值

一.记忆Web端控件需要配合HTML 中的Form表单元素 Label - 在HTML中被编译成<span> Literal - 在HTML中被编译成空 文本类 文本框      <input type="text">                        TextBox 密码框      <input type="password">                 TextBox 属性TextMode="pa