iOS - 代理协议,正向或逆向传值,属性传值的简单实用

来源:互联网 发布:婴儿床 知乎 编辑:程序博客网 时间:2024/06/10 04:24


本来今天准备写照片的多选和相机的调用自定义,但是突然想到代理和协议这两个东西,觉得有必要写一下


代理和协议,一听感觉很高大上,以至于在学习之初,我都不敢用这个东西,觉得是高手必备,菜鸟仰望的东西,只是后来偶然的一次看到了关于代理协议的代码,觉得这他么是协议,握草,好好使啊,就开始自己写简单的协议。

if(你想直接看代码){

#import <UIKit/UIKit.h>

@protocol DLdelegate <NSObject>

- (void)DelegatemakeSureToopen;

- (void)DelegateCancel;

- (void)DelegateService;

@end


@interface TipBoom : UIView

@property (nonatomic,strong)id <DLdelegate>QLdelegate;

@end


然后在点击或者触发事件中调用

-(void)fuwu{

    [self.QLdelegateDelegateService];

}

- (void)makesure{

    [selfremoveFromSuperview];

    [self.QLdelegateDelegatemakeSureToopen];

}

- (void)cancelview{

    [selfremoveFromSuperview];

    [self.QLdelegateDelegateCancel];

}

这样一看,不还是跟属性有关么,觉得也是那么一回事,当然,这是我刚接触代理的时候想的,其实有很多的点还没到,我写这个只是把最简单的代理写出来。

 }else{

关于代理,其实我自己的看法很简单,你用过tabview么,你为什么要写tabview的两个代理,走他们的代理方法,虽然你不懂,但你觉得要这么做,因为方便。

那你觉得为什么代理会走这个方法呢,因为代理的方法有required和optional两种,就像正餐和零食一样,都是食物(方法),但你不吃零食可以,不吃正餐你就会饿,

代理可以传值就是执行的方法可以传递参数,你可以传递过去一个dictionary或者array,interger,float,string都可以。


 }

2.逆向正向传值


正向传值大家都会属性传值,preseg,通知(这玩意建了还要取消,一开始我不知道取消,建了一个demo放手机上运行,就算删了,只要有个bundleid一样的app运行的话,那个本地通知就一直响,烦人)。

我说一下逆向传值吧,就是代理,通知还有是通过一种方法(我喜欢用的)传值【喜欢的方法:】

- (void)leftClick{

    

    MyOrderViewController* oneVC =nil;

    

    for(UIViewController* VCin self.navigationController.viewControllers){

        

        if([VCisKindOfClass:[MyOrderViewControllerclass]]){

            

            oneVC =(MyOrderViewController *) VC;

            if (self.type==0) {

                oneVC.daifukuan = [NSStringstringWithFormat:@"1"];

            }elseif (self.type==1){

            oneVC.daifahuo = [NSStringstringWithFormat:@"1"];

            }elseif (self.type==2){

            oneVC.daishouhuo = [NSStringstringWithFormat:@"1"];

            }elseif (self.type==3){

            oneVC.jiayichenggong = [NSStringstringWithFormat:@"1"];

            }elseif (self.type==4){

                oneVC.tuihuostatus = [NSStringstringWithFormat:@"1"];

            }

            

            

            [self.navigationControllerpopToViewController:oneVCanimated:YES];

        }

    }

}

这是因为控制器的push是以压栈的方式压进去的,就像一个电梯,比如有12层,12层的先进去,他按12层,2层的最后进去,他按2层,但是2层的最先出来,最后当你push到一个界面的时候,上个界面在你控制器的数组里,应该位于数组的最后的一个位置,你就可以get它了,在接下来就是属性传值了。其实这个也是属性传值,只是你要先获取到你要传值的controller。




0 0