zoukankan      html  css  js  c++  java
  • Cocoa设计模式之委托

    protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。 

    delegate-委托,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。

    当一个A view 里面包含了B view,b view需要修改a view界面,那么这个时候就需要用到委托了。

    需要几个步骤

    1,首先定一个协议

    2,a view实现协议中的方法

    3,b view设置一个委托变量

    4,把b view的委托变量设置成a view,意思就是 ,b view委托a view办事情。

    5,事件发生后,用委托变量调用a view中的协议方法

    下面分步说明:

    1,首先定义一个协议

    @protocol PlayerDetailDelegate <NSObject>
    -(void) updatePlayer:(Player *)player;
    @end

    这是一种正式定义协议的方法,还有一种叫做非正式协议,其实质就是Category,对已有的类的方法进行扩展。

    2、a view实现协议中的方法

    首先是在头文件中加入实现协议

    @interface PlayersViewController : UITableViewController<PlayerDetailDelegate>{
        Player *selectedPlayer;
    }
    
    @property(nonatomic,strong) NSMutableArray *players;
    
    @end

    然后在实现文件中实现协议中的方法

    -(void) updatePlayer:(Player *)player{
        selectedPlayer = player;
        NSLog(@"name%@",selectedPlayer.name);
    }

    3,b view中设置一个委托变量

    @interface PlayerDetailViewController : UIViewController{
        id<PlayerDetailDelegate> _playerDelegate;
    }
    
    @property(nonatomic,strong) IBOutlet UITextView *detailView;
    @property(nonatomic,strong) Player *player;
    @property(nonatomic,strong) id<PlayerDetailDelegate> _playerDelegate;
    - (IBAction)buttonPressed:(id)sender;
    @end

    在适当的地方调用该委托对象

    - (IBAction)buttonPressed:(id)sender{
        if(_playerDelegate != nil && [_playerDelegate respondsToSelector:@selector(updatePlayer:)]){
            self.player.name = self.detailView.text;
            [_playerDelegate updatePlayer:self.player];
        }
        NSLog(@"执行!");
    }

    4,把b view的委托变量设置成a view,意思就是 ,b view委托a view办事情。

    5,事件发生后,用委托变量调用a view中的协议方法

  • 相关阅读:
    stl学习笔记—set/multimap
    2013 杭州站 hdoj4778 Gems Fight!
    矩阵加速数列递推
    暑假写的两个数据结构
    AC自动机模板 hdoj2222 UVA-11468
    树莓派安装3.5英寸触摸屏幕
    树莓派设置NTP同步
    在树莓派上设置无线静态IP
    运行tomcat7w.exe未安装指定的服务
    LoadRunner 11安装Micosoft Visual C++ 2005 SP1时提示命令行选项语法错误
  • 原文地址:https://www.cnblogs.com/foxmin/p/2603422.html
Copyright © 2011-2022 走看看