文档章节

第04天实战技术(01):block开发使用场景(保存代码)

宇鸿165
 宇鸿165
发布于 2017/03/28 14:43
字数 711
阅读 4
收藏 0

#####一、block开发使用场景(保存代码)

 1.在一个方法中定义,在另外一个方法调用
 2.在一个类中定义,在另外一个类中调用
  • 1.在一个方法中定义,在另外一个方法调用
  - 1.block的定义属性两种方式:  1.`(怎么声明就怎么定义属性)`2.`给block起一个类型的别名` 推荐方式1
>>>
方式1:
@property(nonatomic, strong) void(^block)(); //  推荐使用方式
>>>
方式2:
// 给block起别名
// BlockType : 类型别名
typedef void(^BlockType) ();
@property(nonatomic, strong) BlockType block1; // 方式2 比较麻烦 还得定义类型
@property(nonatomic, strong) void(^block)(); //  推荐使用方式
- (void)viewDidLoad {
    [super viewDidLoad];
    void(^block)() = ^{
        NSLog(@"-- 调用了block");
    };
    _block = block;    // 给block属性赋值
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    _block();
}
  • 2.在一个类(Cellitem)中定义,在另外一个类(TableViewController)中调用
比如cell的点击在tableview里面实现
>>>
1.分析tableView返回3行显示的数据,之前都是进行判断来处理(这样的代码很垃圾)
//    if (indexPath.row == 0) {
//        // 打电话
//    }
//    else if (indexPath.row == 1)
//    {
//        // 发短信
//    }
//    else if (indexPath.row == 2)
//    {
//        // 发邮件
//    }
解决办法: 使用模型去操作(用模型保存起来)
>>>
2.点击cell的时候 做处理(但是每次点击又进行判断比较麻烦,而且代码很垃圾)
解决办法:使用模型去操作(用block保存)

Cellitem

#import <Foundation/Foundation.h>

@interface Cellitem : NSObject

// 设计模型 : 控件需要展示什么内容, 就定义什么属性
@property(nonatomic, strong) NSString *title;

// 写一个东西不要想的太多 先写出来
// 先定义一个block
// 为什么要定义这个属性 : 保存每个cell做的事情
@property(nonatomic, strong) void(^block)();

+ (instancetype)itemWithTitle:(NSString *)title;

@end

----
#import "Cellitem.h"

@implementation Cellitem

+ (instancetype)itemWithTitle:(NSString *)title
{
    Cellitem *item = [[self alloc]init];
    item.title = title;    
    return item;
}

@end

code

#import "TableViewController.h"
#import "Cellitem.h"
//     1.tableView 展示3个cell,打电话,发短信,发邮件

@interface TableViewController ()

@property(nonatomic, strong) NSArray *items;

@end

@implementation TableViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建模型
    Cellitem *item1=  [Cellitem itemWithTitle:@"打电话"];
    item1.block = ^{
        NSLog(@"打电话");
    };
    Cellitem *item2=  [Cellitem itemWithTitle:@"发短信"];
    item2.block = ^{
        NSLog(@"发短信");
    };
    Cellitem *item3=  [Cellitem itemWithTitle:@"发邮件"];
    item3.block = ^{
        NSLog(@"发邮件");
    };
    
    _items = @[item1,item2,item3];
    
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _items.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"cell";
    // 1.从缓存池取
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
#pragma 垃圾代码
//    if (indexPath.row == 0) {
//        // 打电话
//    }
//    else if (indexPath.row == 1)
//    {
//        // 发短信
//    }
//    else if (indexPath.row == 2)
//    {
//        // 发邮件
//    }
    
#pragma 把要标题保存到模型里面
    Cellitem *item = self.items[indexPath.row];

    cell.textLabel.text = item.title;
    return cell;
    
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
#pragma 垃圾代码
//    if (indexPath.row == 0) {
//        // 打电话
//    }
//    else if (indexPath.row == 1)
//    {
//        // 发短信
//    }
//    else if (indexPath.row == 2)
//    {
//        // 发邮件
//    }
#pragma 把要做的事情(代码)保存到模型
    // 取出模型
    Cellitem *item = self.items[indexPath.row];
    // 为了严谨 进行判断一下 (如果不判断有可能会出现坏内存访问)
    if (item.block) {
        item.block();
    }
    
    
}

@end

© 著作权归作者所有

宇鸿165
粉丝 1
博文 919
码字总数 368963
作品 0
广州
私信 提问
JavaScript 30天每日效果图

JavaScript 30天每日效果图 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑战...

黎跃春
2017/07/19
0
0
JAVA区块链项目实战视频课程

课程介绍 全国首套,基于java的区块链实战教程。目的是让更多的java编程者了解区块链,掌握区块链开发。 1、区块链理论:以node.js例子区块链原理有深刻理解; 2、区块链java实战:深刻理解区...

小红牛
2018/09/14
0
0
Cocos2d-js中使用纹理对象创建Sprite对象

本节我们会通过一个实例介绍纹理对象创建Sprite对象使用,这个实例如图5-2所示,其中地面上的草是放在背景(如下图所示)中的,场景中的两棵树是从后图所示的“树”纹理图片中截取出来的,图...

智捷课堂
2015/03/28
89
0
老男孩51CTO博客博文列表整理版20170620更新

老男孩51CTO博客博文列表整理版 (本文原自于一道考试题http://oldboy.blog.51cto.com/2561410/1860985) 老男孩教育运维脱产班35期 刘同学 2017-06-14 17:44:41 老男孩的MySQL私房菜新书视频1...

老男孩oldboy
2016/10/14
0
0
《Cocos2d-x实战 Lua卷》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659697.html 当当:http://product.dangdang.com/23659810.html 《Cocos2d-x实战 Lua卷》源码及样章下载地址: ...

智捷课堂
2015/03/26
211
1

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
今天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
今天
6
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
今天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部