24.界面间的传值

原创 2015年11月21日 10:47:28

第⼆个视图控制器如何获得第⼀个视图控制器的部分信息?

例如:第⼆个界⾯中lable显⽰第⼀个界⾯textField中的⽂本

UINavigationController以栈的⽅式管理视图控制器。通过push和pop

控制跳转

UINavigationBar管理⼀组UINavigationItem,UINavigationItem包含了UIBarButtonItem。

1.使⽤属性传值解决从前往后传值的问题

明确传值的位置(从前往后传)

一般从前往后传 属性传值

步骤:1.先获取到要传的值

步骤:2.在第二个页面 声明一个属性 这个属性用来接收传过来的值

2.使⽤delegate(代理)解决从后往前传值的问题

=================================

实现代理传值

1.在(前面的界面)第一个界面创建一个按钮和一个UITextField

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];
textField.backgroundColor = [UIColor yellowColor];
[self.view addSubview:textField];
textField.tag = 100;
[textField release];

UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
button.frame = CGRectMake(100, 250, 100, 100);
button.backgroundColor = [UIColor blueColor];
[self.view addSubview:button];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:(UIControlEventTouchUpInside)];

2.在(后面的界面)要传值的界面.h文件中创建协议

先创建一个协议

@protocol SecondViewControllerDelegate

声明一个方法 用于传值

传的这个值 就是方法的参数

- (void)changeTextFieldText:(NSString *)text;

@end

@interface SecondViewController : UIViewController

@property (nonatomic ,retain)UITextField *textField;

声明一个字符串属性 用来接收传过来的值

@property (nonatomic ,retain)NSString *str;

声明一个属性 用于传值

@property (nonatomic,assign)id< SecondViewControllerDelegate>delegate;

@end

3.在(后面的界面)要传值的界面.m文件中实现协议

- (void)dealloc

{

[_textField release];

[_str release];

[super dealloc];

}

创建一个按钮和textField

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor magentaColor];

UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
button.frame = CGRectMake(100, 250, 100, 100);
button.backgroundColor = [UIColor blueColor];
[self.view addSubview:button];

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

self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];

self.textField.backgroundColor = [UIColor yellowColor];
self.textField.text = self.str;
[self.view addSubview:self.textField];
[self.textField release];
}

实现按钮点击方法实现传值

- (void)buttonClick:(UIButton *)button

{

// 明确 初值的位置(从后往前传)

// 相当于 让代理去 干活

// 安全判断

if ([_delegate respondsToSelector:@selector(changeTextFieldText:)]) {

// 通过代理 把值传回去

[_delegate changeTextFieldText:self.textField.text];

}

// 返回上一个界面

[self.navigationController popViewControllerAnimated:YES];

}

4.在(前面的界面)第一个界面实现点击方法遵守后面界面的协议实现协议方法

步骤1:先遵守协议

@interface RootViewController () < SecondViewControllerDelegate >

步骤2:设置代理

-(void)buttonClick:(UIButton *)button
{
// 从后往前传 代理传值
SecondViewController *secondVC = [[SecondViewController alloc] init];
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];

// 设置代理
secondVC.delegate = self;
}

步骤3:实现协议中的方法

-(void)changeTextFieldText:(NSString *)text
{

// 取出texeField
UITextField textField = (UITextField )[self.view viewWithTag:100];

// 把传过来的值赋值
textField.text = text;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Block--两个界面 间回调传值

使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButt...

两界面间传值方法总结

以下以viewB传值给viewA 为例 1)属性传值 @interface和@implemented 方法:在viewA的属性中声明变量,在viewB中声明、定义viewA,并将值传递给vie...
  • shawjan
  • shawjan
  • 2013年04月17日 21:29
  • 1115

ios界面间传值

1.由主界面A传值给子界面B Ashan

C#中的五种界面间传值方法

C#中五种传值方法:  一、Session传值(保存在服务端)      新建一个login.aspx页面,添加用户名和密码,以及两个文本框,和一个Button安扭。      在butt...

Android界面间的相互传值

简单介绍一下Android界面之间的传值,以下为效果展示图 1: 2: 3: 以下为代码示例 activity_main.xml ...

IOS界面之间通过委托传值

  • 2014年02月22日 22:14
  • 1.33MB
  • 下载

Android 创建一个activity 及创建Intent对象跳转界面并传值

一、创建一个activity 步骤1、创建一个java类,该类必须继承Android.app.Activity 步骤2、重写该类的onCreate(Bundle)方法 步骤3、创建一个布局文件r...

界面跳转传值demo

  • 2016年01月15日 15:03
  • 1014KB
  • 下载

winform跨界面传值

  • 2017年04月28日 11:27
  • 48KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:24.界面间的传值
举报原因:
原因补充:

(最多只允许输入30个字)