关闭

24.界面间的传值

标签: navigation导航条界面间的传值
99人阅读 评论(0) 收藏 举报
分类:

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

例如:第⼆个界⾯中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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23054次
    • 积分:930
    • 等级:
    • 排名:千里之外
    • 原创:72篇
    • 转载:6篇
    • 译文:0篇
    • 评论:5条
    最新评论