界面传值整的好头疼啊

页面间传值(RootViewController和subViewController)

方式1:  正向传值和反向传值,在AppDelegate.h文件内定义成员变量[UIApplication sharedApplication].delegate将返回该成员变量的地址,可以进行存值和取值

方式2:  正向传值,直接在第二层视图声明并初始化第一层视图的变量,使用该变量来获取第一层视图的成员变量的值;

反向传值,就是在第二层视图调用第一曾视图的方法,该方法内有第一层视图的成员变量,通过对成员变量赋值,把数据传给第一层视图, 就是说第二层视图要有第一层视图的成员变量.(原因反向传值时,不能通过初始化变量来获取原来视图的地址).

方式3:   使用代理进行反向传值,在第一层视图声明一个block, 在第二层视图实现该block, 在第一层中调用,block就会找到其实现来获取第二层视图中的成员变量,从而实现反向传值.

以下是第2种方式的具体代码实现

/***********************************************************/

RootViewController.h

/***********************************************************/

#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController

@property (nonatomic, copy) NSString *string;

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

@end

/***********************************************************/

RootViewController.m

/***********************************************************/

#import "RootViewController.h"

#import "SubViewController.h"

@interface RootViewController ()

@property (nonatomic, strong) SubViewController *sub;

@end

@implementation RootViewController

-(void)sendContent:(NSString *)str

{

_string=str;

}

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(100, 80, 60, 30)];

[button setTitle:@"Click1" forState:UIControlStateNormal];

button.backgroundColor=[UIColor lightGrayColor];

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

[self.view addSubview:button];

_string=button.titleLabel.text;

UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(100, 120, 200, 30)];

label.tag=12;

[self.view addSubview:label];

_sub=[[SubViewController alloc] init];

}

-(void)btnClick:(UIButton *)sender

{

[self presentViewController:_sub animated:YES completion:nil];

}

-(void)viewDidAppear:(BOOL)animated

{

[super viewWillAppear:animated];

UILabel *la=(UILabel *)[self.view viewWithTag:12];

la.text = _string;

NSLog(@"%@",_string);

}

/***********************************************************/

SubViewController.h

/***********************************************************/

#import <UIKit/UIKit.h>

@interface SubViewController : UIViewController

@property (nonatomic, copy) NSString *content;

@end

/***********************************************************/

SubViewController.m

/***********************************************************/

#import "SubViewController.h"

#import "RootViewController.h"

@interface SubViewController ()

@end

@implementation SubViewController

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view.

for(int i=1; i<4; i++)

{

UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(100, 50+i*40, 60, 30)];

[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];

[button setTitle:[NSString stringWithFormat:@"Click%d",i] forState:UIControlStateNormal];

button.tag=i;

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

button.backgroundColor=[UIColor lightGrayColor];

[self.view addSubview:button];

}

}

-(void)btnClick:(UIButton *)sender

{

[self dismissViewControllerAnimated:YES completion:nil];

RootViewController *root=(RootViewController *)self.presentingViewController;

_content=sender.titleLabel.text;

[root sendContent:_content];

}

-(void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

RootViewController *root=(RootViewController *)self.presentingViewController;

_content=[root string];

for (int i=1; i<4; i++)

{

UIButton *btn=(UIButton *)[self.view viewWithTag:i];

if([btn.titleLabel.text isEqualToString:_content])

{

btn.selected=YES;

}

else

{

btn.selected=NO;

}

}

}

时间: 2024-10-24 06:17:19

界面传值整的好头疼啊的相关文章

界面传值

属性传值 1.属性传值用于第一个界面向第二个界面传值 2.明确两者联系的桥梁,也就是触发跳转的地方 3.明确传输的值  类型是什么 4.在第二个视图控制器内部声明相对应类型的属性 来接收传输的值 5.在第二个界面使用传入的值 1.声明协议 UI中的协议为当前类名 + Delegate 2.  声明代理 3.代理对象执行协议 4.指定第二个界面的代理对象为自己 5.接收协议 6.实现协议中的方法

属性传值,协议传值,block传值,单例传值四种界面传值方式

一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N + 1界面传值.而在此基础上,必须知道跳转界面的明确位置及所要传的值的具体类型.在第二个界面中声明所要传值 类型的属性. @interface SecondViewController : UIViewController //声明一个字符串属性来保存第一个界面传过来的字符串内容 @propert

iOS-跨界面传值和跨应用传值

跨界面传值 从一个界面将一个结果值传到另一个界面,这个是我们在开发过程中非常常见的一个问题.传值本身并不是一个太复杂的问题,在此主要简述一下常用的传值方法. 我们传值常用的方法主要有四种: 1.属性传值 2.代理传值 3.block传值 4.通知传值 属性传值: 属性传值应该来说是比较简单的一种传值方式,但是这种传值方式有其局限性,常用的一种场合是我们从界面A跳转到界面B,如何我们想讲界面A的值传到界面B,属性传值是比较方便的一种方式.如下图所示,如果我们点击A界面上的一个按钮,跳转到B界面,并

JavaScript界面传值与前后台互调

话说曾在校时,前端的第一门课程HTML静态网页设计,其老师,真是应了他的名字: 路遥知马力. 整个学期硬是全部在 Dreamwear 中进行拖拽控件来教学,未曾教授一句代码.成功忽悠了全体学生,课上一本正经的胡说八道,对拖拽控件的心得侃侃而谈,想想也是讽刺,同期的学生都是纯手写编辑界面,我们却依旧沉浸在设计下的拖拽操作中,带来的就是界面看起来还像回事,只是源码惨不忍睹,后来有幸在网上观看了燕十八老师的HTML系列视频,犹如冬服参汤,醍醐灌顶.使我终没有在拖拽的路上越走越远. 1.前台界面互调传值

iOS UI08_TableView界面传值

实现两个界面之间内容的传递 // // MainViewController.m // UI08_TableView界面传值 // // Created by dllo on 15/8/7. // Copyright (c) 2015年 zhozhicheng. All rights reserved. // #import "MainViewController.h" #import "SecondViewController.h" @interface Main

界面传值,单例,模态

v 界面间传值场景 1.由前往后属性传值.在后一个界面中定义属性(属性类型和数据类型一致) 2.当push到下一个界面之前给属性赋值3.在下一个界面中,对应的控件从属性中获取数据 2. 由前往后 协议代理,1.在后一个界面定义协议(协议中定一个传值方法,方法由参数,参数类型和传输类型一致)2.在后一个界面定义代理属性,3.在前一个界面中设置代理4.代理对象的类服从协议 3.多界面传值(即可以从前往后,也可以从后往前) 单例一个类只有一个对象 1.新建一个单例类 2.添加便利构造器方法并且保证该方

iOS中block用法之两个界面传值问题

Block的使用有很多方面,其中传值只是它的一小部分,但是很常用更实用,下面介绍Block在两个界面之间的传值用法: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个Label和一个Button,其中Label是为了显示第二个视图控制器传过来的字符串, Button是为了push到第二个界面. 第二个界面的只创建一个TextField,是为了输入文字,当输入文字并且返回第一个界面的时候(第二个视图将要消失的时候),就将这个 TextFiled中的文字传给第一个界面并且显示在

iOS开发- 界面传值(1)-通知模式(广播)

之后的几篇博客, 记录下不同界面间传值的常用办法. 这篇文章记录广播的方式. iOS的设计模式中,通知模式也是其中重要的模式之一,Notification直译为通知,其实本人觉得叫做广播模式更为贴切.它的作用就是一个对象对多个对象的同步操作.用法很简单,一个对象发出一个广播,需要收听的听众就先注册一下,然后选定频道,完了就可以收听广播的内容了. 但是要注意一点, 在收听之前, 一定要先注册. 不然发送的广播接受不到, 也就是值改变了, 不会做出响应. 下面是一个简单的demo, 效果如下: 第一

iOS开发之不同界面传值

iOS开发中不可避免要用到不同界面传值,今天就总结下三种传值方法:闭包传值.代理传值和通知传值. 1.闭包传值 如图建立VC1和VC2,com+R运行正常~把VC2的button用Action关联并设置tag. 在VC2中定义一个闭包 var closures: ((clicked: NSString) -> Void)? 设置VC2中三个button的点击事件(这里三个button的tag设置为101,102,103) @IBAction func numBtn(sender: AnyObje