zoukankan      html  css  js  c++  java
  • ios开发 Block(二) 实现委托

    委托和block是IOS上实现回调的两种机制。Block基本可以代替委托的功能,而且实现起来比较简洁,比较推荐能用block的地方不要用委托。

    实现效果如图

    第一步,自定义CustomCell

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface CustomCell : UITableViewCell
     4 
     5 @property (strong, nonatomic) IBOutlet UILabel *labName;
     6 @property (copy,nonatomic) void(^BuyGoods)(NSString *);
     7 
     8 - (IBAction)ButtonBuyPressed:(id)sender;
     9 
    10 @end
     1 #import "CustomCell.h"
     2 
     3 @implementation CustomCell
     4 
     5 
     6 
     7 - (IBAction)ButtonBuyPressed:(id)sender {
     8     
     9     NSString *goodName=_labName.text;
    10     _BuyGoods(goodName);
    11     
    12 }
    13 
    14 @end

    在custom.h文件里面有

    @property (copy,nonatomic) void(^BuyGoods)(NSString *);

    声明了一个block变量

    在custom.m文件里面回调

     NSString *goodName=_labName.text;

     _BuyGoods(goodName);

    下面看实现的类里面

     1 #import "ViewController.h"
     2 #import "CustomCell.h"
     3 
     4 @interface ViewController ()
     5 
     6 @end
     7 
     8 @implementation ViewController
     9 
    10 - (void)viewDidLoad
    11 {
    12     [super viewDidLoad];
    13     // Do any additional setup after loading the view, typically from a nib.
    14     
    15     _tabGoods.delegate=self;
    16     _tabGoods.dataSource=self;
    17 }
    18 
    19 - (void)didReceiveMemoryWarning
    20 {
    21     [super didReceiveMemoryWarning];
    22     // Dispose of any resources that can be recreated.
    23 }
    24 
    25 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    26 {
    27     static NSString *CellIdentifier = @"CustomCell";
    28     CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    29     if (cell == nil) {
    30         NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    31         cell = [nib objectAtIndex:0];
    32     }
    33     cell.labName.text = [NSString stringWithFormat:@"商品名称%d",indexPath.row];
    34     __block NSString *tipMsg=cell.labName.text;
    35     cell.BuyGoods=^(NSString *str){
    36         UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"提示内容" message:tipMsg delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
    37         [alertView show];
    38     };
    39     
    40     return cell;
    41 }
    42 
    43 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    44     return 1;
    45 }
    46 
    47 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    48     return 10;
    49 }
    50 
    51 @end

    在ViewController.m文件里面

     __block NSString *tipMsg=cell.labName.text;

        cell.BuyGoods=^(NSString *str){

            UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"提示内容" message:tipMsg delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];

            [alertView show];

        };

    实现Block里面的代码块,__block NSString *tipMsg=cell.labName.text;这一行保证变量能在block代码块里面使用.........

    运行效果图:

  • 相关阅读:
    第2章 医疗检查安全吗?推荐!
    第3章 药物对你有何影响
    基础篇 第二节 项目管理的知识点
    第1章 简介
    魔兽争霸 意志亡灵Space专访:20岁就要死去
    第八章 陶穆太太 第九章 冒险经历 第十章 在旧地下室里
    第4章 医生在利用你试验新药吗
    第十二章 陶穆太太归来
    第十一章 爸爸妈妈不明白……
    <a>锚链接的功能取消
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/4079475.html
Copyright © 2011-2022 走看看