代理一般都是用于反向傳值的稚晚,但是有時(shí)候可能項(xiàng)目的需要做正向傳值崇堵,做法如下:
首先誰要傳值誰就是委托,1.委托要做的事情就是寫協(xié)議客燕;2.擁有一個(gè)遵守該協(xié)議的delegate成員鸳劳;3.使用這個(gè)delegate觸發(fā)回調(diào)。
代碼如下:
1.寫協(xié)議
@protocol PassValue <NSobject>
??- (void)PassValue:(NSString *)name;
@end
2.成員屬性
@property (nonatomic,weak) id delegate;
3.觸發(fā)回調(diào)也搓,傳值
ThreeViewController *ThreeViewController = [[ThreeViewController alloc] init];
? self.delegate=ThreeViewController;//設(shè)置代理
?if ([self.delegate respondsToSelector:@selector(PassValue:)]) {
? ? ? ? [self.delegate PassValue:@"哈哈"];
? ? }
? ? [self presentViewController:ThreeViewController animated:YES completion:^{
? ? }];
在這里要注意了:
1.如果??Class 'xxxxxViewController' does not conform to protocol 'PassValue'
證明你沒有實(shí)現(xiàn)協(xié)議里面的方法赏廓,只要你實(shí)現(xiàn)協(xié)議的方法了就不會有警告了;
2.如果??Assigning to 'id' from incompatible type 'xxxxxxViewController *__strong'
證明你沒有遵守協(xié)議傍妒,如果你遵守了協(xié)議還有這個(gè)警告楚昭,(ps,當(dāng)你遵守了協(xié)議,運(yùn)行的結(jié)果沒影響拍顷,可以不用理會抚太,但是如果你還是想把警告去掉,你就如下去做:)
在你接收值的控制器.h文件中這樣修改:
#import "SecondViewController.h"
@interface ThreeViewController : SecondViewController
SecondViewController是要傳值的控制器;這樣警告就會消失了尿贫;
委托寫完了电媳,現(xiàn)在寫到代理了。
代理要做的事情:1.遵守協(xié)議庆亡;2.設(shè)置代理匾乓;3,實(shí)現(xiàn)代理方法
代碼如下:1遵守協(xié)議
@interface ThreeViewController ()<PassValue>
設(shè)置代理上面寫了又谋,這里就不需要了拼缝;
3.實(shí)現(xiàn)代理方法
- (void)backPassValue:(NSString *)name
{
? ? NSLog(@"-------%@",name);
}
如果是用代理方向傳值,一樣的道理彰亥。咧七。。任斋。继阻。。