界面通信之属性传值、代理传值

界面通信有三种方法

1、属性传值

2、代理传值

3、blcok传值

先讲讲属性和传值和代理传值

//属性传值- (void)sendValue {
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    secondVC.string = _textField.text;//这句是属性传值的核心,在需要接收值的界面声明一个字符串属性接受值
    secondVC.color = self.view.backgroundColor;
    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];

}

属性传值虽然方便,但是属性传值只能从前往后传值,不能从后往前传值,那么就需要用代理传值和block传值方法了

代理传值的步骤

//1、声明协议,代理传值用于从后往前传值,所以后者应该是协议的拥有者,在后面的界面声明协议
//UI中的协议名称为 当前类名 + Delegate
@protocol FourthViewControllerDelegate <NSObject>

- (void)pushValue:(NSString *)text color:(UIColor *)color;

@end
//2、声明代理
@property (nonatomic, assign) id<FourthViewControllerDelegate> delegate;
//3、执行协议方法
- (void)back {
    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(pushValue:color:)]) {
        [self.delegate pushValue:self.textField.text color:self.view.backgroundColor];
    }

    [self.navigationController popViewControllerAnimated:YES];
}
//4、接收协议  接受协议的应该是需要接收值的界面,红色部分便是接收协议
@interface ThirdViewController : UIViewController<FourthViewControllerDelegate>@end

//5、设置代理

- (void)next {


FourthViewController *fourthVC = [[FourthViewController alloc] init];


fourthVC.delegate = self;//指定第四个界面的代理对象为第三个视图控制器


[self.navigationController pushViewController:fourthVC animated:YES];


[fourthVC release];


}

//6、实现代理方法

- (void)pushValue:(NSString *)text color:(UIColor *)color {


self.label.text = text;


self.view.backgroundColor = color;


}

 
时间: 2024-10-04 11:53:19

界面通信之属性传值、代理传值的相关文章

iOS 页面间传值 之 属性传值,代理传值

手机 APP 运行,不同页面间传值是必不可少,传值的方式有很多(方法传值,属性传值,代理传值,单例传值) ,这里主要总结下属性传值和代理传值. 属性传值:属性传值是最简单,也是最常见的一种传值方式,但其具有局限性(一般用于将第一个页面的值传递到第二个页面,但无法从第二个页面传到第一个页面), 向SecondViewController传值:SecondViewController 设置属性 sendMessage 1 - (void)rightButtonAction:(UIBarButtonI

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:(UIAp

iOS 页面跳转传值,属性传值,代理传值,代码块传值,单例传值,通知传值

有时候我们在页面跳转的时候回传递相应的参数,如,你想把在第一个页面的文本框里的内容显示在第二个文本框中,或者你又想把第二个文本框中的内容改变之后到第一个页面的文本框中,所有,这个时候我们就要用到页面跳转传值 1.属性传值(正向传值) 属性传值是正向传值,只可以从前面一个页面传递到第二个页面,不可以从第二个页面传递到第一个页面 2.代理传值(逆向传值) 代理传值是逆向传值 代理传值步骤 代理传值 适用于 反向传值 1.1 创建协议 及协议方法 在反向传值的页面(SecondViewControll

iOS基础-UINavigationController、界面通信

UINavigationController 导航控制器 是iOS中最常用的多视图控制器之一,它用来管理多个视图控制器 导航控制器可以认为是管理控制器的控制器,主要管理有层级关系的控制器 导航控制器以栈的方式管理所控制的视图控制器,至少要有一个被管理的视图控制器,这个控制器我们称作导航控制器的根视图控制器 出栈和入栈pushViewController:animated:进入下一个视图控制器 popViewControllerAnimated:返回上一个视图控制器 popToviewContro

UI基础:UINavigationController、界面通信

UINavigationControlle UINavigationController:导航控制器,是iOS中最常用的多视图控制器之一,它用来管理多个视图控制器.也称为多视图控制器. 导航控制器可以认为是管理控制器的控制器,主要管理有层级关系的控制器. 创建: UINavigationController继承于UIViewController,以栈的形式管理所 控制的视图控制器,至少要有1个被管理的视图控制器,这个控制器 我们称作,导航控制器的根视图控制器. 任何继承于UIViewContro

iOS--页面间的代理传值(属性、代理(委托)、代码块、单例、通知)

(一)属性传值 第二个界面中的lable显示第一个界面textField中的文本 首先我们建立一个RootViewControllers和一个DetailViewControllers,在DetailViewControllers中声明一个textString属性,用于接收传过来的字符串, (三)代理传值 RootViewControllers页面push到DetailViewControllers页面,如果DetailViewControllers页面的信息想回传(回调)到RootViewCo

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式: (一)属性传值 第二个界面中的lable显示第一个界面textField中的文本 首先我们建立一个RootVie

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

iOS 页面间几种传值方式(属性,代理,block,单例,通知) 姜糖水 2015-05-03 52 阅读 iOS 移动开发 第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五

iOS传值方式:属性,代理,block,单例,通知

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式: (一)属性传值 第二个界面中的lable显示第一个界面textField中的文本 首先我们建立一个RootView