楔子
iOS里不同View之间传值有多种方式,常用的一种是delegate。具体如下:
概述
delegate典型应用场景如下:由OneView进入TwoView,在TwoView里输入值后,传回到OneView中。工程文件结构如下:
工程结构步骤
- 定义delegate
Xcode-File-New-File选择Objective-c File,点击next,在File Type:中选择Protocol,next后即可创建一个delegate。
#import <Foundation/Foundation.h>
@protocol PassValueDelegate <NSObject>
- (void)passValue:(NSString *)string;
@end
- 在OneViewController中实现delegate
OneViewController.h
#import <UIKit/UIKit.h>
#import "PassValueDelegate.h"
@interface OneViewController : UIViewController<PassValueDelegate>
@end
OneViewController.m
- (void)mybuttonPressed {
TwoViewController *twoVC = [[TwoViewController alloc] init];
twoVC.delegate = self;//设置第二个ViewController的delegate为self
[self.navigationController pushViewController:twoVC animated:YES];
}
- 在TwoViewController中国年声明一个遵循PassValueDelegate的Object对象
TwoViewController.h
#import <UIKit/UIKit.h>
#import "PassValueDelegate.h"
@interface TwoViewController : UIViewController
@property (nonatomic, weak) NSObject<PassValueDelegate> *delegate;
@end
TwoViewController.m
- (void)mybuttonPressed {
[self.delegate passValue:self.myTextField.text];
[self.navigationController popViewControllerAnimated:YES];
}
注意:以上实现了使用delegate在两个VieController之间传值,这种场景一般应用在进入子界面输入信息后传回给第一个界面的情况,比如修改用户个人信息,点击修改进入修改界面,修改完后回到显示界面显示修改后的结果。需要重点注意步骤2中的twoVC.delegate = self;
和步骤3中的[self.delegate passValue:self.myTextField.text];
这两行代码。
网友评论