iOS中多视图的传值 属性传值和代理传值

首先创建两个类 ,FirstViewController和SecondViewController,都继承于UIViewController

 1 #import "AppDelegate.h"
 2 #import "FirstViewController.h"
 3
 4 @interface AppDelegate ()
 5
 6 @end
 7
 8 @implementation AppDelegate
 9
10
11 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
12     //初始化视图控制器
13     FirstViewController *firstVc=[[FirstViewController alloc]init];
14     //设置根视图控制器
15     self.window.rootViewController=firstVc;
16     return YES;
17 }
1 #import <UIKit/UIKit.h>
2 #import "SecondViewController.h"
3 @interface FirstViewController : UIViewController<UITextFieldDelegate,posVlueDelegate>
4 @property(strong,nonatomic) UITextField *textName;
5 @end
 1 #import "FirstViewController.h"
 2
 3 @interface FirstViewController ()
 4
 5 @end
 6
 7 @implementation FirstViewController
 8
 9 - (void)viewDidLoad {
10     [super viewDidLoad];
11     //设置背景视图的颜色
12     self.view.backgroundColor=[UIColor redColor];
13     //初始化
14     self.textName=[[UITextField alloc] initWithFrame:CGRectMake(100, 150, 200, 40)];
15     //设置文本框的颜色
16     self.textName.backgroundColor=[UIColor whiteColor];
17     self.textName.borderStyle=1;
18     [self.view addSubview:self.textName];
19
20 }
21 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
22 {
23     SecondViewController *secondVc=[[SecondViewController alloc] init];
24     //设置属性值 即 传值给SecondViewController
25     secondVc.str=self.textName.text;
26     //进入第二页
27     [self presentViewController:secondVc animated:YES completion:^{
28         NSLog(@"FirstViewController切换到SecondViewController");
29     }];
30     //指定代理
31     secondVc.delegate=self;
32 }
33 //实现协议方法
34 -(void)posVlue:(NSString *)str
35 {
36     self.textName.text=str;
37 }
38
39
40
41
42
43
44
45 - (void)didReceiveMemoryWarning {
46     [super didReceiveMemoryWarning];
47     // Dispose of any resources that can be recreated.
48 }
 1 #import <UIKit/UIKit.h>
 2 //创建协议
 3 @protocol posVlueDelegate<NSObject>
 4 -(void)posVlue:(NSString *)str;//协议方法
 5
 6 @end
 7
 8 @interface SecondViewController : UIViewController
 9 @property(strong,nonatomic)UITextField *textName;
10 @property(strong,nonatomic)NSString *str;
11 //创建协议类型的属性
12 @property(assign,nonatomic)id<posVlueDelegate>delegate;
13 @end
 1 #import "SecondViewController.h"
 2
 3 @interface SecondViewController ()
 4
 5 @end
 6
 7 @implementation SecondViewController
 8
 9 - (void)viewDidLoad {
10     [super viewDidLoad];
11     self.view.backgroundColor=[UIColor grayColor];
12     self.textName=[[UITextField alloc] initWithFrame:CGRectMake(100, 150, 200, 50)];
13     self.textName.backgroundColor=[UIColor whiteColor];
14     self.textName.borderStyle=1;
15     [self.view addSubview:self.textName];
16     //接受FirstViewController传过来的值
17     self.textName.text=self.str;
18 }
19 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
20 {
21     [self dismissViewControllerAnimated:YES completion:^{
22         NSLog(@"SecondViewController切换到FirstViewController");
23     }];
24
25     if (self.delegate) {
26         [self.delegate posVlue:self.textName.text];
27     }
28 }
29
30
31 - (void)didReceiveMemoryWarning {
32     [super didReceiveMemoryWarning];
33     // Dispose of any resources that can be recreated.
34 }

总结:

1.页面之间传值方式

属性传值

适用于 正向传值

1.1 在要显示信息的页面创建属性

1.2 在要传值的页面 设置属性值

1.3 在显示页面的viewDidLoad方法中,接受属性值

代理传值

适用于反向传值

1.创建协议及协议方法,在反向传值的页面SecondViewController中

2.创建协议类型的属性,在SecondViewController中创建属性

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

3.调用属性即 delegate

SecondViewController页面中 对象传值的方法中调用

if (self.delegate) {

[self.delegate posVlue:self.textName.text];

}

4.在第一页 即显示修改富哦信息的页面

遵循协议 实现协议方法 指定代理对象(即 在页面传递参数的方法中为代理赋值-(void)posVlue:(NSString *)str

{

self.textField.text=str;

})

时间: 2024-10-15 18:20:58

iOS中多视图的传值 属性传值和代理传值的相关文章

IOS中标签视图和Block

标签视图控制器 - UITabBarController 自定义UITabBarItem 自定义导航栏和标签栏背景图片 三个视图控制器的综合使用 一. 标签视图控制器  UITabBarController UITabBarController有以下重要属性 viewControllers   显示的视图控制器 tabBar                  标签栏 delegate                协议 tabBar 是 UITabBar对象, 包含多个UITabBarItem,

浅谈iOS中的视图优化

引言: 让我们来思考几个问题,你开发过的产品,它还有可以优化的地方吗?能增加它的帧率吗?能减少多余的CPU计算吗?是不是存在多余的GPU渲染?业务这点工作量对于越来越强大的设备面前显得微不足道,但作为一个细心的开发者,我觉得很有必要来谈谈iOS中的视图优化. 本文从开发者最容易犯错的地方出发,结合例子,从以下几个角度阐述如何进行视图优化: Color Blended Layers Color Copied Images Color Misaligned Images Color Offscree

Swift - iOS中各种视图控制器(View Controller)的介绍

在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来作为子类,以向屏幕中添加逻辑. 2,导航控制器 - Navigation Controller 这个控制器呈现一个视图控制器的栈,应用程序可以在上面推入更多的视图控制器. 当新视图推入栈,或旧视图弹出栈时,导航控制器会以动画的形式(比如卷动)显示隐藏这些视图. 使用样例:系统“设置”应用程序 3,表

iOS中的视图跳转的三种方式(代码跳转,根据桥跳转,按钮跳转)

#import "ViewController.h" #import "SecondViewController.h" @interface ViewController () @property (retain, nonatomic) IBOutlet UITextField *textField; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // D

IOS中多视图应用设置首界面

XCODE版本:6.4 IOS版本:8.4 错误: View Switcher[4883:389088] Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set? 因为书上使用的较旧的版本,xcode6之前的版本在创建项目时有"empty application"模板,但是6.4没有这

ios中的视图调试(ios8苹果引入了强大的新技术,不可不看)

在ios8以前,我们想要进行ui实时调试,可以依赖的技术手段有: 用xcode启动app,然后点击xcode暂停运行按钮,然后在调试控制台输入下面语句: po [[UIWindow keyWindow] recursiveDescription] 然后就可以看到完整的UI结构和层级关系,类似如下: <UIWindow: 0x7b691cd0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x7b6921f0>; layer

iOS中为什么block用copy属性

1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC下返回Block).另一个需要注意的问题是关于线程安全,在声明Block属性时需要确认“在调用Block时另一个线程有没有可能去修改Block?”这个问题,如果确定不会有这种情况发生的话,那么Block属性声明可以用nonatomic.如果不肯定的话(通常情况是这样的),那么你首先需要声明Block

IOS中集合视图UICollectionView中DecorationView的简易使用方法

转载自:   http://www.it165.net/pro/html/201312/8575.html Decoration View是UICollectionView的装饰视图.苹果官方给的案例都没涉及到这个视图的使用.没有具体的细节.我今天用UICollectionView做了一个简易的书架.主要是Decoration View的使用方法. 效果如下: 基本的UICollectionView使用方法请自己查询. #import "CVViewController.h" #imp

iOS中UIImageView帧动画相关属性和方法

@property(nonatomic,copy)NSArray *animationImages; 需要播放的序列图片数组(里面都是UIImage对象,会按顺序显示里面的图片) @property(nonatomic)NSTimeInterval animationDuration; 帧动画的持续时间 @property(nonatomic)NSInteger animationRepeatCount; 帧动画的执行次数(默认是无限循环) - (void)startAnimating; 开始执