楔子
iOS里不同View之間傳值有多種方式纳本,常用的一種是delegate。具體如下:
概述
delegate典型應(yīng)用場(chǎng)景如下:由OneView進(jìn)入TwoView,在TwoView里輸入值后,傳回到OneView中坚弱。工程文件結(jié)構(gòu)如下:
步驟
- 定義delegate
Xcode-File-New-File選擇Objective-c File,點(diǎn)擊next关摇,在File Type:中選擇Protocol,next后即可創(chuàng)建一個(gè)delegate史汗。
#import <Foundation/Foundation.h>
@protocol PassValueDelegate <NSObject>
- (void)passValue:(NSString *)string;
@end
- 在OneViewController中實(shí)現(xiàn)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;//設(shè)置第二個(gè)ViewController的delegate為self
[self.navigationController pushViewController:twoVC animated:YES];
}
- 在TwoViewController中國年聲明一個(gè)遵循PassValueDelegate的Object對(duì)象
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];
}
注意:以上實(shí)現(xiàn)了使用delegate在兩個(gè)VieController之間傳值,這種場(chǎng)景一般應(yīng)用在進(jìn)入子界面輸入信息后傳回給第一個(gè)界面的情況拒垃,比如修改用戶個(gè)人信息,點(diǎn)擊修改進(jìn)入修改界面瓷蛙,修改完后回到顯示界面顯示修改后的結(jié)果悼瓮。需要重點(diǎn)注意步驟2中的twoVC.delegate = self;
和步驟3中的[self.delegate passValue:self.myTextField.text];
這兩行代碼。