uitableView review yesterday’s knowledge :

 
 
 
 
folding group :
 
--------------------------------------------------------------------------------------------------------------------------------------------------
teacher code : 
 
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    QFGroupHead *headView=[[NSBundle mainBundle]loadNibNamed:@"QFGroupHead" owner:nil options:nil][0];
    [headView addTarget:self action:@selector(onHeadClicked:) forControlEvents:UIControlEventTouchUpInside];
    headView.tag=section;
    QFQQGroupModel *model=dataArray[section];
    [headView refreshUIWithModel:model];
    return headView;
}
 
-(void)onHeadClicked:(UIView *)headView{
    NSLog(@"onHeadClicked:%d",headView.tag);
    QFQQGroupModel *model=dataArray[headView.tag];
    model.isHide=!model.isHide;
    [self.myTableView reloadSections:[NSIndexSet indexSetWithIndex:headView.tag] withRowAnimation:UITableViewRowAnimationNone];
}
 
 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    //在数据源中取出数据模型
    QFQQGroupModel *model=dataArray[section];
    if (model.isHide) {
        return 0;
    }
    //返回数据模型中相应的数据
    return model.groupMember.count;
}
 
teacher ’s dataModel :
 
@property (nonatomic,copy) NSString *groupName;
@property int friendNum;
@property (nonatomic,strong) NSMutableArray *groupMember;
@property BOOL isHide;
 
 
 
--------------------------------------------------------------------------------------------------------------------------------------------------
My code :
 
 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    GroupHead *groupHead = [[NSBundle mainBundle] loadNibNamed:@"GroupHead" owner:nil options:nil][0];
    
    [groupHead addTarget:self action:@selector(onHeadClicked:) forControlEvents:UIControlEventTouchUpInside];
    groupHead.tag = section;
    [groupHead refreshUIWithModel:self.model modelSection:section];
    return groupHead;
}
 
-(void)onHeadClicked:(UIView *)headView{
    
    NSNumber *number = self.model.isHiddenArray[headView.tag];
    if(number.intValue == 1)
        [self.model isHiddenSection:headView.tag Boolis:NO];
    else
        [self.model isHiddenSection:headView.tag Boolis:YES];
    
    [self.myTableView reloadSections:[NSIndexSet indexSetWithIndex:headView.tag] withRowAnimation:UITableViewRowAnimationNone];
    
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSNumber *number = self.model.isHiddenArray[section];
    if(number.intValue){
        return 0;
    }
    return [self.model.groupMemberNum[section] intValue];
}
 
my DataModel :
 
@property (nonatomic, strong) NSMutableArray *groupName;
@property (nonatomic, strong) NSMutableArray *dataArray;
@property (nonatomic, strong) NSMutableArray *groupMemberNum;
@property (nonatomic, strong) NSMutableArray *isHiddenArray;
@property int groupNum;
-(void)begin;
-(void)isHiddenSection:(NSInteger)section Boolis:(BOOL)isbool;
@end
 
 
DataModel implement :
 
-(void)begin{
    _dataArray = [NSMutableArray array];
    _groupName = [NSMutableArray array];
    _groupMemberNum = [NSMutableArray array];
    _isHiddenArray = [NSMutableArray array];
    _groupNum = 10;
    for (int i=0; i<10; ++i) {
        NSMutableArray *groupArray = [NSMutableArray array];
        NSString *groupstr = [NSString stringWithFormat:@"Group %d", i];
        [_groupName addObject:groupstr];
        int num = arc4random()%10+1;
        NSNumber *nsNum = [[NSNumber alloc] initWithBool:NO];
        [_isHiddenArray addObject:nsNum];
        [_groupMemberNum addObject:[NSString stringWithFormat:@"%d", num]];
        for (int j=0; j<num; ++j) {
            NSString *str = [NSString stringWithFormat:@"cell %d", j];
            [groupArray addObject:str];
        }
        [_dataArray addObject:groupArray];
    }
}

-(void)isHiddenSection:(NSInteger)section Boolis:(BOOL)isbool{
    NSNumber *num = [[NSNumber alloc] initWithBool:isbool];
    [_isHiddenArray removeObjectAtIndex:section];
    [_isHiddenArray insertObject:num atIndex:section];
}

 
 
GroupHead :
 
-(void)refreshUIWithModel:(Datamodel*)model modelSection:(NSInteger)section{
    groupName.text = model.groupName[section];
    totalMember.text = [NSString stringWithFormat:@"TotalMember:%@", model.groupMemberNum[section]];
    NSNumber *number = model.isHiddenArray[section];
    if(number.intValue == 0)
        hiddenStatus.text = @">";
    else hiddenStatus.text = @"v";
}
 
--------------------------------------------------------------------------------------------------------------------------------------------------
 
Search Bar :
 
     完成搜索功能的步骤
     
     1、先实例化一个全局数组,用于储存搜索结果。
     2、实例化一个UISearchBar,并设置为tableview的tableheadview。
     3、用上面实例化的seachbar初始化一个搜索结果显示视图(UISearchDisplayController)
     4、设置uiseachDisplayController的三个代理
     //searchDC内部有一个talbview,这里设置代理就等于给它内部的tableview设置代理
     searchDC.searchResultsDataSource=self;
     searchDC.searchResultsDelegate=self;
     //searchDC自己的代理
     searchDC.delegate=self;
     5、导入UISearchDisplayDelegate协议
     6、实现UISearchDisplayDelegate的一个重要的代理方法
     - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
     每当搜索栏的文字发生变化时,都会调用这个代理方法
     在这个方法里面我们遍历整个数据源,找到包含搜索文字的那些,然后放进搜索结果的数组里面(注意,搜索之前要记得把搜索结果的数组先清空)
     7、由于myTableView和搜索结果的tableview共用我们这个类的那些代理方法,所以要在所有的代理方法里面加入判断,以返回正确的数据。
     例如:
     //有多少组
     -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
     //判断是否为searchDisplayController的结果tableview
     if (tableView==searchDC.searchResultsTableView) {
     return 1;
     }
     return totalArray.count;
     }
     、、、、、
     
     8、至此,搜索功能完成。
     
     */
 
 
 
 
--------------------------------------------------------------------------------------------------------------------------------------------------
 
my Search Bar Code ::
 
//
//  MainViewController.m
//  UITableViewCellXib_01
//
//  Created by YuLei on 4/11/14.
//  Copyright (c) 2014 ___DuanYuLei___. All rights reserved.
//

#import "MainViewController.h"
#import "GroupHead.h"

@interface MainViewController () <UITableViewDataSource, UITableViewDelegate, UISearchDisplayDelegate]]>
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
@end

@implementation MainViewController{
    UISearchDisplayController *searchDisplayController;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    _model = [[Datamodel alloc] init];
    [_model begin];
    self.myTableView.delegate = self;
    self.myTableView.dataSource = self;
    
    //search function
    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 30)];
    self.myTableView.tableHeaderView = searchBar;
    
    searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
    searchDisplayController.searchResultsDataSource = self;
    searchDisplayController.searchResultsDelegate = self;
    searchDisplayController.delegate = self;

//create a colorful foot line or clear the line.
    UIView *footView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
    footView.backgroundColor = [UIColor clearColor];
    self.myTableView.tableFooterView = footView;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    if(tableView == searchDisplayController.searchResultsTableView)
        return 0;
    return 44;
}

-(void)onHeadClicked:(UIView *)headView{
    
    NSNumber *number = self.model.isHiddenArray[headView.tag];
    
    if(number.intValue == 1)
        [self.model isHiddenSection:headView.tag Boolis:NO];
    else
        [self.model isHiddenSection:headView.tag Boolis:YES];
    
    [self.myTableView reloadSections:[NSIndexSet indexSetWithIndex:headView.tag] withRowAnimation:UITableViewRowAnimationNone];
    
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    GroupHead *groupHead = [[NSBundle mainBundle] loadNibNamed:@"GroupHead" owner:nil options:nil][0];
    if (tableView == searchDisplayController.searchResultsTableView) {
        return nil;
    }
    
    [groupHead addTarget:self action:@selector(onHeadClicked:) forControlEvents:UIControlEventTouchUpInside];
    groupHead.tag = section;
    [groupHead refreshUIWithModel:self.model modelSection:section];
    return groupHead;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    
    if (tableView == searchDisplayController.searchResultsTableView) {
        return self.model.searchDataArray.count;
    }
    
    NSNumber *number = self.model.isHiddenArray[section];
    if(number.intValue){
        return 0;
    }
    return [self.model.groupMemberNum[section] intValue];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    if(tableView == searchDisplayController.searchResultsTableView)
        return 1;
    return self.model.groupNum;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *reuseID = @"myCell";
    UITableViewCell *cell = [_myTableView dequeueReusableCellWithIdentifier:reuseID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    }
    
    if(tableView == searchDisplayController.searchResultsTableView){
        cell.textLabel.text = self.model.searchDataArray[indexPath.row];
    }else{
        cell.textLabel.text = self.model.dataArray[indexPath.section][indexPath.row];
    }
    return cell;
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
    [self.model.searchDataArray removeAllObjects];
    for (int i=0; i<self.model.groupNum; ++i) {
        NSArray *friends = self.model.dataArray[i];
        for (int j=0; j<friends.count; ++j) {
            NSString *str = friends[j];
            NSRange range = [str rangeOfString:searchString];
            if (range.length > 0) {
                [self.model.searchDataArray addObject:str];
            }
        }
    }
    return YES;
}

@end

 
--------------------------------------------------------------------------------------------------------------------------------------------------
 
Add a groupHeader cache
 
 
define it in :
 
@implementation MainViewController{
    UISearchDisplayController *searchDisplayController;
    NSMutableDictionary *cacheHeadViewDictionary;
}
 
- (void)viewDidLoad{
    [super viewDidLoad];
    cacheHeadViewDictionary=[NSMutableDictionary dictionary];
 
 
use it as function  <tableView:viewForHeaderInSection>
 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    if (tableView == searchDisplayController.searchResultsTableView) {
        return nil;
    }
    
    GroupHead *groupHead = cacheHeadViewDictionary[[NSString stringWithFormat:@"%d", section]];
    if (groupHead == nil) {
        groupHead = [[NSBundle mainBundle] loadNibNamed:@"GroupHead" owner:nil options:nil][0];
        groupHead.backgroundColor=[UIColor colorWithRed:(CGFloat)random()/RAND_MAX green:(CGFloat)random()/RAND_MAX blue:(CGFloat)random()/RAND_MAX alpha:1];
        [groupHead addTarget:self action:@selector(onHeadClicked:) forControlEvents:UIControlEventTouchUpInside];
        groupHead.tag = section;
        [cacheHeadViewDictionary setObject:groupHead forKey:[NSString stringWithFormat:@"%d",section]];
    }
    [groupHead refreshUIWithModel:self.model modelSection:section];
    return groupHead;
}
 
 
--------------------------------------------------------------------------------------------------------------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 

IOS UI 第十篇: UITABLEVIEW的更多相关文章

  1. IOS UI 第十一篇: UITABLEVIEW

    DIY a tableviewcell :   - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *) ...

  2. IOS UI 第八篇:基本UI

    实现图片的滚动,并且自动停止在每张图片上     - (void)viewDidLoad{    [super viewDidLoad]; UIScrollView *scrollView = [[U ...

  3. UI第十八节——UITableView

    在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,基本大部分应用都有UITableView.当然它的广泛使用自然离不开它强大的功能,今天就针对U ...

  4. iOS UI基础-9.0 UITableView基础

    在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView.UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳. UITableView有两种样式: ...

  5. IOS UI 第六篇:基本UI

    加两个UI模块   - (void)viewDidLoad{    [self begin1];    [self begin2];    [super viewDidLoad];    // Do ...

  6. IOS UI 第五篇:基本UI

    添加个导航栏:         Xib1 *xib1 = [[Xib1 alloc] initWithNibName:@"Xib1" bundle:nil];    UINavig ...

  7. iOS UI基础-9.2 UITableView 简单微博列表

    概述 我们要实现的效果: 这个界面布局也是UITableView实现的,其中的内容就是UITableViewCell,只是这个UITableViewCell是用户自定义实现的.虽然系统自带的UITab ...

  8. iOS UI基础-9.1 UITableView 团购

    概述 接下来,我们要做的是团购界面的设计,最张要实现的效果图及项目结构图      团购数据的展示 思路: 系统自带的tableCell不能展示三个文本,不能满足条件,自定义tableCell 每一个 ...

  9. IOS UI 第四篇:基本UI

    ViewController 应用   再第一个XIB页面创建另一个XIB页面,并且通过按钮调用它     - (IBAction)GoSecond:(id)sender {    secondVie ...

随机推荐

  1. UVALive 5099 Nubulsa Expo 全球最小割 非网络流量 n^3

    主题链接:点击打开链接 意甲冠军: 给定n个点m条无向边 源点S 以下m行给出无向边以及边的容量. 问: 找一个汇点,使得图的最大流最小. 输出最小的流量. 思路: 最大流=最小割. 所以题意就是找全 ...

  2. YUV422蓝色屏幕输出的调试援助

    YUV422蓝色屏幕输出的调试援助 YUV422有YUYV,YVYU,UYVY,VYUY四种,以下笔者就就以UYVY为例介绍一下数据构成.因为常常要跟视频输入打交道,所以YUV422这种常见的视频信号 ...

  3. 对于VS相关的插件

    原文:对于VS相关的插件 本人使用这款IDE时间不长,但是很佩服其强大的功能. 编写代码时候的插件辅助,确实让人很舒服. 网上找了好多,有几个是很有用的,但是忘记了他们的网址,再次,总结下,也是给自己 ...

  4. 一个SQL面试题

    面试问题都是基于 bug统计分析续(一)基于SQL的Bug统计方法 中3-2节的讨论抽象出来的. 题目:如果一张表有AC两列,怎么找各种C里不同A的数目.并列出相相应的C的值,并找出每种C下A最多的A ...

  5. java安全编程

    java安全程序实际上是一个点稍微防御性编程意味着内,竟java作为编程语言,较C,c++,本身被认为是比较安全的,随着C,C++这样的偏底层的编程语言比,java少了显示的指针调用.少了程序上的内存 ...

  6. 一个奇怪的注意事项TNS-12545 TNS-12560 TNS-00515

    近来的reportDB无法从一开始就与系统收听,比较奇怪的现象. 由于server有听众的一个实例上正常启动,这是不是从开始监听器的实例手动启动是正常的.所以写下来未能找到离奇写的原因. 1.故障现象 ...

  7. cocos2dx 3.1.1移植安卓apk (lua交叉编译器项目 mac环境)

    cocos2dx 3.1.1   lua项目安卓交叉编译 mac环境 本文基于ant,sdk,ndk,adt等软件和环境已经事前设置好 1\新建项目 在mac的终端下输入命令: cocos new t ...

  8. validateRequest="false"属性及xss攻击

    validateRequest="false"   指是否要IIS验证页面提交的非法字符,比如:>,<号等,当我们需要将一定格式得html代码获得,插入数据库时候,就要 ...

  9. PHP连接Access数据库代码

    使用php的odbc函数,不创建数据源. $connstr="DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath(" ...

  10. 【github课程】创建github仓库和库创建一个版本号,并添加到存储库文件的版本号

    首先,需要登录github注册一个帐号:https://github.com/ 注册帐号登录后,.在右上角,"新仓库": 然后会出现例如以下的界面: 仅仅须要输入仓库的名称,描写叙 ...