UI 多个视图控制器(UIViewController)间的 协议传值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UI 多个视图控制器(UIViewController)间的 协议传值相关的知识,希望对你有一定的参考价值。

  1 #import <UIKit/UIKit.h>
  2 
  3 
  4 
  5 //1.协议传值
  6 
  7 // 协议由后面的视图控制器制定
  8 
  9 @protocol secondDelegate <NSObject>
 10 
 11 
 12 
 13 //协议的方法需要带一个或多个参数
 14 
 15 - (void)passValueWithString:(NSString *)string;
 16 
 17 
 18 
 19 @end
 20 
 21 
 22 
 23 @interface secondViewController : UIViewController
 24 
 25 
 26 
 27 //2.设置自己的 代理人 属性
 28 
 29 @property (nonatomic, assign) id<secondDelegate> delegate;
 30 
 31 
 32 
 33 @end
 34 
 35 ==================================================
 36 
 37 - (void)buttonAction:(UIButton *)button
 38 
 39 {
 40 
 41     NSLog(@"suck");
 42 
 43     //3.让自己的代理人 调用 协议方法
 44 
 45     [self.delegate passValueWithString:button.currentTitle];
 46 
 47     [self.navigationController popViewControllerAnimated:YES];
 48 
 49 }
 50 
 51 ==================================================
 52 
 53 在第二个视图控制器的 .h 文件的具体方法中  让自己的代理人 调用 协议方法
 54 
 55 - (void)buttonAction:(UIButton *)button
 56 
 57 {
 58 
 59     NSLog(@"suck");
 60 
 61     //3.让自己的代理人 调用 协议方法
 62 
 63     [self.delegate passValueWithString:button.currentTitle];
 64 
 65     [self.navigationController popViewControllerAnimated:YES];
 66 
 67 }
 68 
 69 
 70 ==================================================
 71 
 72 #import <UIKit/UIKit.h>
 73 
 74 #import "secondViewController.h"
 75 
 76 //4.由第一个viewController 签订 第二个viewController的协议
 77 
 78 @interface mainViewController : UIViewController <secondDelegate>
 79 
 80 
 81 
 82 @end
 83 
 84 
 85 
 86 ===================================================
 87 
 88 在第一个视图控制器的 .h 文件里的具体方法中实现 以下:
 89 
 90 
 91 
 92 - (void)buttonAction:(UIButton *)button
 93 {
 94     secondViewController *secondVC = [[secondViewController alloc]init];
 95     
 96     //5.给第二个viewController 指定代理人
 97     [secondVC setDelegate:self];
 98     
 99     [self.navigationController pushViewController:secondVCanimated:YES];
100     [secondVC release];
101 }
102 
103 //6.实现协议的方法
104 - (void)passValueWithString:(NSString *)string
105 {
106     NSLog(@"从第二个viewController传来的值: %@", string);
107     UILabel *label = (UILabel *)[self.view viewWithTag:50];
108     [label setText:string];
109 }

 

以上是关于UI 多个视图控制器(UIViewController)间的 协议传值的主要内容,如果未能解决你的问题,请参考以下文章

Storyboard 中新视图控制器的类

子视图与子视图控制器 z 位置

导航控制器和记忆值

使用多个 ViewController、Xcode 将代码连接到情节提要中的 UI

嵌入 Segue 目标视图控制器被排除在 UI 状态恢复之外

屏幕旋转