zoukankan      html  css  js  c++  java
  • IOS开发学习笔记029-反选、全选、删除按钮的实现

    还是在上一个程序的基础上进行修改

    1、反选按钮

    2、全选按钮

    3、删除按钮

    4、其他代码优化

    1、反选按钮

    反选的过程就是将_deleteShops数组中得数据清空,然后将Shops中数组添加到_deleteShops数组

     添加一个 UIBarButtonItem 按钮,绑定响应事件.

    代码如下

     1 // 反选
     2 - (void)unSelected
     3 {
     4     // 1、记录shops数组的长度和_deleteShops的长度
     5     NSInteger shopsCount = _shops.count;
     6     NSInteger deleteCount = _deleteShops.count;
     7 
     8     // 2、将数据全部添加到临时数组中,有先后顺序:shops在前,deleteshop在后
     9     NSMutableArray *tmp = [NSMutableArray arrayWithArray:_shops];
    10     [tmp addObjectsFromArray:_deleteShops];
    11     
    12     // 3、添加数据到_deleteShops数组,取出前一部分
    13     for (NSInteger i = 0 ; i < shopsCount ;i ++)
    14     {
    15         Shop *s = [tmp objectAtIndex:i];
    16         // 添加数据到_deleteShops数组
    17         [_deleteShops addObject:s];
    18         
    19     }
    20     // 4、将取消选中的按钮从_deleteShops数组中移除数组范围(shopsCount,)后一部分,
    21     for (NSInteger i = shopsCount ; i < (shopsCount + deleteCount);i ++)
    22     {
    23         Shop *s = [tmp objectAtIndex:i];
    24         [_deleteShops removeObject:s];
    25        
    26     }
    27 
    28     // 5、更新表格
    29     [_tableView reloadData];
    30 }

    2、全选全不选按钮

    全选全不选按钮的实现主要在_deleteShops数组的数据进行增减

     1 // 全选全不选按钮
     2 - (void)selectAll
     3 {
     4     // 1、如果一样就清空deleteShop数组
     5     if(_deleteShops.count == _shops.count)
     6     {
     7         [_deleteShops removeAllObjects];
     8     }
     9     // 2、否则就将shops数组中数据添加到deleteshops数组中
    10     else
    11     {
    12         // 先清空deleteshop数组
    13         [_deleteShops removeAllObjects];
    14         // 再添加数据
    15         for (NSInteger i = 0 ; i < _shops.count ;i ++)
    16         {
    17             Shop *s = [_shops objectAtIndex:i];
    18             // 添加数据到_deleteShops数组
    19             [_deleteShops addObject:s];
    20             
    21         }
    22     }
    23     // 3、更新表格
    24     [_tableView reloadData];
    25 }

    3、删除按钮

     _deleteShops数组中保存的就是要删除的数据,直接从_shops数组中对数据进行删除就行

     1 // 删除选中行
     2 -(void)remove
     3 {
     4     // 1、删除行数据
     5     [_shops removeObjectsInArray:_deleteShops];
     6     // 2、删除_deleteShops数组
     7     [_deleteShops removeAllObjects];
     8     // 3、更新表格
     9     [self.tableView reloadData];
    10 }

      

     4、其他代码实现

     在上述按钮按下的过程中会有几个控件的状态改变,删除按钮状态、选中行数量(lable标签)的状态、全选按钮状态、反选按钮状态。每次都会产生数据的更改,所以每次都需要对数据界面进行刷新。

    所以把这些状态的改变放到方法numberOfRowsInSection中

     1 // 设置行
     2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
     3 {
     4     // 因为每次选中这两个值都会同时改变,所以放在这里会更好,可以省去很多代码
     5     // 更新行时判断选中cell个数显示方式,每次改变都会调用
     6     _textlable.text = (_deleteShops.count == 0) ? @"淘宝" : [NSString stringWithFormat:@"淘宝(%d)",_deleteShops.count];
     7     // 删除按钮状态
     8     _buttonDelete.enabled = (_deleteShops.count == 0) ? NO : YES;
     9     // 反选按钮状态
    10     _unSelectBtn.enabled = (_shops.count == 0) ? NO : YES;
    11     // 全选按钮状态
    12     _selectAllBtn.enabled = (_shops.count == 0) ? NO : YES;
    13    return _shops.count;
    14 
    15 }

     效果如下:

    主要代码

     1 //
     2 //  SLQViewController.h
     3 //  UITableView-淘宝
     4 //
     5 //  Created by Christian on 15/5/18.
     6 //  Copyright (c) 2015年 slq. All rights reserved.
     7 //
     8 
     9 #import <UIKit/UIKit.h>
    10 
    11 @interface SLQViewController : UIViewController
    12 @property (weak, nonatomic) IBOutlet UILabel *textlable; // lable标签
    13 @property (weak, nonatomic) IBOutlet UIBarButtonItem *buttonDelete; // 删除按钮
    14 - (IBAction)remove; // 删除事件
    15 - (IBAction)unSelected; // 反选事件
    16 - (IBAction)selectAll; // 全选
    17 @property (weak, nonatomic) IBOutlet UITableView *tableView; // tableView
    18 @property (weak, nonatomic) IBOutlet UIBarButtonItem *unSelectBtn; // 反选按钮
    19 @property (weak, nonatomic) IBOutlet UIBarButtonItem *selectAllBtn; // 全选按钮
    20 
    21 @end
      1 //
      2 //  SLQViewController.m
      3 //  UITableView-淘宝
      4 //
      5 //  Created by Christian on 15/5/18.
      6 //  Copyright (c) 2015年 slq. All rights reserved.
      7 //
      8 
      9 #import "SLQViewController.h"
     10 #import "Shop.h"
     11 @interface SLQViewController () <UITableViewDataSource, UITableViewDelegate>
     12 
     13 
     14 {
     15     NSMutableArray *_shops;
     16     NSMutableArray *_deleteShops;
     17 }
     18 @end
     19 
     20 @implementation SLQViewController
     21 
     22 - (void)viewDidLoad
     23 {
     24     [super viewDidLoad];
     25     // Do any additional setup after loading the view, typically from a nib.
     26     
     27     // 读取*.plist文件
     28     // 1.获取全路径
     29     NSString *path = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];
     30     // 2.读取数据到数组
     31     NSArray *array = [NSArray arrayWithContentsOfFile:path];
     32     // 初始化数组
     33     _shops  = [NSMutableArray array];
     34     _deleteShops = [NSMutableArray array];
     35     //NSLog(@"%d",array.count);
     36     // 添加数据到界面
     37     for (NSDictionary *arr in array)
     38     {
     39         // 1.创建shop
     40         Shop *s = [Shop shopWithDict:arr];
     41         // 2.添加到数组
     42         [_shops addObject:s];
     43     }
     44    //_buttonDelete.enabled = YES;
     45     
     46 }
     47 
     48 // 删除选中行
     49 -(void)remove
     50 {
     51     // 1、删除行数据
     52     [_shops removeObjectsInArray:_deleteShops];
     53     // 2、删除_deleteShops数组
     54     [_deleteShops removeAllObjects];
     55     // 3、更新表格
     56     [self.tableView reloadData];
     57 }
     58 
     59 // 反选
     60 - (void)unSelected
     61 {
     62     // 1、记录shops数组的长度和_deleteShops的长度
     63     NSInteger shopsCount = _shops.count;
     64     NSInteger deleteCount = _deleteShops.count;
     65 
     66     // 2、将数据全部添加到临时数组中,有先后顺序:shops在前,deleteshop在后
     67     NSMutableArray *tmp = [NSMutableArray arrayWithArray:_shops];
     68     [tmp addObjectsFromArray:_deleteShops];
     69     
     70     // 3、添加数据到_deleteShops数组,取出前一部分
     71     for (NSInteger i = 0 ; i < shopsCount ;i ++)
     72     {
     73         Shop *s = [tmp objectAtIndex:i];
     74         // 添加数据到_deleteShops数组
     75         [_deleteShops addObject:s];
     76         
     77     }
     78     // 4、将取消选中的按钮从_deleteShops数组中移除数组范围(shopsCount,)后一部分,
     79     for (NSInteger i = shopsCount ; i < (shopsCount + deleteCount);i ++)
     80     {
     81         Shop *s = [tmp objectAtIndex:i];
     82         [_deleteShops removeObject:s];
     83        
     84     }
     85 
     86     // 5、更新表格
     87     [_tableView reloadData];
     88 }
     89 // 全选全不选按钮
     90 - (void)selectAll
     91 {
     92     // 1、如果一样就清空deleteShop数组
     93     if(_deleteShops.count == _shops.count)
     94     {
     95         [_deleteShops removeAllObjects];
     96     }
     97     // 2、否则就将shops数组中数据添加到deleteshops数组中
     98     else
     99     {
    100         // 先清空deleteshop数组
    101         [_deleteShops removeAllObjects];
    102         // 再添加数据
    103         for (NSInteger i = 0 ; i < _shops.count ;i ++)
    104         {
    105             Shop *s = [_shops objectAtIndex:i];
    106             // 添加数据到_deleteShops数组
    107             [_deleteShops addObject:s];
    108             
    109         }
    110     }
    111     // 3、更新表格
    112     [_tableView reloadData];
    113 }
    114 // 设置行
    115 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    116 {
    117     // 因为每次选中这两个值都会同时改变,所以放在这里会更好,可以省去很多代码
    118     // 更新行时判断选中cell个数显示方式,每次改变都会调用
    119     _textlable.text = (_deleteShops.count == 0) ? @"淘宝" : [NSString stringWithFormat:@"淘宝(%d)",_deleteShops.count];
    120     // 删除按钮状态
    121     _buttonDelete.enabled = (_deleteShops.count == 0) ? NO : YES;
    122     // 反选按钮状态
    123     _unSelectBtn.enabled = (_shops.count == 0) ? NO : YES;
    124     // 全选按钮状态
    125     _selectAllBtn.enabled = (_shops.count == 0) ? NO : YES;
    126    return _shops.count;
    127 
    128 }
    129 // 设置行内容
    130 // 每当有一个cell进入视野范围内就会调用
    131 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    132 {
    133     static NSString *ID = @"C1";
    134     // 从缓存池中选择可循环利用的cell,指定标识c1,这样就会找到结构一样的cell
    135     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    136     // 如果缓存池中没有
    137     if (cell == nil)
    138     {
    139         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; // 设定标识C1
    140     }
    141     // UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"c1"];
    142     // 更新数据到界面
    143     Shop *s = _shops[indexPath.row];
    144     cell.textLabel.text = s.name;
    145     cell.imageView.image = [UIImage imageNamed:s.icon];;
    146     cell.detailTextLabel.text = s.desc;
    147     // 显示最右侧的按钮
    148     if ([_deleteShops containsObject:s]) // 判断是否已经选中的cell,是得话设置图标
    149     {
    150         cell.accessoryType = UITableViewCellAccessoryCheckmark;
    151     }
    152     else    // 否则就什么都不显示
    153     {
    154         cell.accessoryType = UITableViewCellAccessoryNone;
    155     }
    156     
    157    // NSLog(@"%p,第%ld行数据",cell,indexPath.row);
    158     
    159     return cell;
    160 }
    161 // 设置每一行的高度
    162 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    163 {
    164     //
    165     //NSLog(@"height is 70");
    166     return 100;
    167 }
    168 // 选中某行执行
    169 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    170 {
    171     //NSLog(@"selected");
    172     //选中后颜色变深
    173     // 在最右侧显示一个对号图标
    174     // 1、获得选中行
    175     Shop *s = _shops[indexPath.row];
    176     // 2、修改选中行的数据,将选中的cell添加到待删除数组中
    177     if ([_deleteShops containsObject:s]) // 如果已经存在,再次点击就取消选中按钮
    178     {
    179         [_deleteShops removeObject:s];
    180     }
    181     else    // 否则就添加待删除数组
    182     {
    183         [_deleteShops addObject:s];
    184     }
    185     // 3、更新数据
    186     [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    187     // 4、显示选中条数
    188     if(_deleteShops.count == 0)
    189     {
    190         _textlable.text = @"淘宝";
    191         _buttonDelete.enabled = NO;
    192     }
    193     else
    194     {
    195         _textlable.text = [NSString stringWithFormat:@"淘宝(%d)",_deleteShops.count];
    196         _buttonDelete.enabled = YES;
    197     }
    198     
    199 }
    200 // 取消选中某行执行
    201 - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
    202 {
    203     NSLog(@"Deselected");
    204 }
    205 
    206 
    207 @end

    源代码:http://pan.baidu.com/s/1mgIIUEk 

  • 相关阅读:
    神经形态视觉传感器的研究进展及应用综述——论文摘抄
    脉冲神经网络研究进展综述——论文摘抄
    Learning in Spiking Neural Networks by Reinforcement of Stochastic Synaptic Transmission
    A reinforcement learning algorithm for spiking neural networks
    强化学习第2版第4章笔记——动态规划
    强化学习第2版第6章笔记——时序差分学习
    强化学习第2版第5章笔记——蒙特卡洛方法
    强化学习第2版第3章笔记——有限马尔可夫决策过程
    Python模块之paramiko
    Python模块之pexpect
  • 原文地址:https://www.cnblogs.com/songliquan/p/4518086.html
Copyright © 2011-2022 走看看