学英语。所以用英文来记录笔记。
 
Define the dataSource:
 
@implementation ViewController
{
    NSMutableArray *dataSourse;
    UITableView *myTableView;
}
 
Define the dataSource array:
 
    dataSourse = [NSMutableArray array];
    for (int i=0; i<50; ++i) {
        NSString *str = [NSString stringWithFormat:@"the %d row", i];
        [dataSourse addObject:str];
    }
 
 
DataSource Two-dimensional Array:
 
    dataSource = [NSMutableArray array];
    for (int s=0; s<5; ++s) {
        NSMutableArray *sectionArray=[NSMutableArray array];
        for (int r=0; r<10; ++r) {
            NSString *str=[NSString stringWithFormat:@"the %d group--the %d row", s, r];
            [sectionArray addObject:str];
        }
        [dataSource addObject:sectionArray];
    }
 
 
 
Create a UITABLEVIEW
 
    UITableView *myTableVie = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, 320, 480) style:UITableViewStylePlain];
    
    myTableVie.delegate = self;
    myTableVie.dataSource = self;
    
    [self.view addSubview:myTableVie];
 
 
Implement delegate:
 
#import "ViewController.h"

@interface ViewController ()<UITableViewDataSource , UITableViewDelegate]]>

@end

 
 
The UITableViewDataSource  have two function which must be implemented:
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"xxxx"];
    
    NSString *str = dataSourse[indexPath.row];
    cell.textLabel.text=[NSString stringWithFormat:@"I am a cell %@", str];
    return cell;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return dataSourse.count;
}
 
 
The Reusable Mechanism:
 
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *reuseID = @"myCell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:reuseID];
    if (cell == nil) {
        NSLog(@"alloc new cell");
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseID];
        cell.detailTextLabel.text = [NSString stringWithFormat:@"previous %d", indexPath.row];
    }
    NSString *str=dataSourse[indexPath.row];
    cell.textLabel.text=[NSString stringWithFormat:@"I am a cell %@", str];
    return cell;
}
 
 
Add the group (all code):
 
- (void)viewDidLoad
{
    
    [super viewDidLoad];
    
    dataSource = [NSMutableArray array];
    for (int s=0; s<5; ++s) {
        NSMutableArray *sectionArray=[NSMutableArray array];
        for (int r=0; r<10; ++r) {
            NSString *str=[NSString stringWithFormat:@"the %d group--the %d row", s, r];
            [sectionArray addObject:str];
        }
        [dataSource addObject:sectionArray];
    }
    
    UITableView *myTableVie = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, 320, self.view.frame.size.height) style:UITableViewStylePlain];
    
    myTableVie.delegate = self;
    myTableVie.dataSource = self;
    
    
    UIView *headView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 200)];
    headView.backgroundColor=[UIColor redColor];
    myTableVie.tableHeaderView=headView;
    [self.view addSubview:myTableVie];
    
}

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

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 30;
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return [NSString stringWithFormat:@"The %d group", section];
}

//DIY group header , but if overwrite the function, the groupheader function is unvaliable..

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
 UIView *headView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 30)];
 headView.backgroundColor = [UIColor blackColor];
 
 UILabel *label=[[UILabel alloc] initWithFrame:headView.frame];
 label.text=[NSString stringWithFormat:@"The %d group", section];
 label.textColor=[UIColor redColor];
 label.textAlignment = NSTextAlignmentCenter;
 label.font=[UIFont boldSystemFontOfSize:15];
 [headView addSubview:label];
 return headView;
 }

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return dataSource.count;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    NSArray *sectionArray=dataSource[section];
    return sectionArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *reuseID = @"myCell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:reuseID];
    if (cell == nil) {
        NSLog(@"alloc new cell");
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseID];
        cell.detailTextLabel.text = [NSString stringWithFormat:@"previous %d", indexPath.row];
    }
    NSString *str=dataSource[indexPath.section][indexPath.row];
    cell.textLabel.text=str;
    return cell;
}

 
 
Delete the tableView in one row :
 
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"tableview ");
    //delete the data in a row
    NSMutableArray *sectionArray = dataSource[indexPath.section];
    [sectionArray removeObjectAtIndex:indexPath.row];
    //delete a row in tableview
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
 
 
Ps : The difference between the self and sender , 
for example : 
 
-(void)onLeftButtonClicked:(id)sender{
    NSLog(@"d1 :%@", sender);
    NSLog(@"d2 :%@", self);
    if (myTableView.isEditing) {
        myTableView.editing=NO;
    }else{
        myTableView.editing=YES;
    }
}
 
In the Button action , 
self is the object: <QFViewController: 0x8fab460> sender is the object: <UIBarButtonItem: 0x8fba3b0> 
sender is GUI widget self. 
self is the class self.
 
 
The IOS 7 own particular feature :
 
self.automaticallyAdjustsScrollViewInsets=NO;
 
It make the layout automatic adapt the padding.
 
 
//How many group
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return dataSource.count;
}
//Set group header height
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 30;
}
//Set group header text
-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return [NSString stringWithFormat:@"The %d group",section];
}
 
//User-defined group-header, if overwrite this function, the function which set header text is invalid.
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UIView *headView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 30)];
    //headView’s width must be the same with the return variable of function which named tableView:heightForHeaderInSection:
 
    headView.backgroundColor=[UIColor colorWithRed:(CGFloat)random()/RAND_MAX green:(CGFloat)random()/RAND_MAX blue:(CGFloat)random()/RAND_MAX alpha:1];
    UILabel *label=[[UILabel alloc]initWithFrame:headView.frame];
    label.text=[NSString stringWithFormat:@"The %d group ",section];
    label.font=[UIFont boldSystemFontOfSize:15];
    label.textColor=[UIColor redColor];
    label.textAlignment=NSTextAlignmentCenter;
    [headView addSubview:label];
    
    return headView;
}
 
//How many rows every group own
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    NSArray *sectionArray=dataSource[section];
    return sectionArray.count;
}
 
 
//return this row cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *reuseID=@"myCell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:reuseID];
    if (cell==nil) {
        NSLog(@"new cell");
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseID];
        cell.detailTextLabel.text=[NSString stringWithFormat:@"privious %d",indexPath.row];
    }
    NSString *str=dataSource[indexPath.section][indexPath.row];
    cell.textLabel.text=str;
    return cell;
}

 
//Edit tableview
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    /*
     UITableViewCellEditingStyleNone,
     UITableViewCellEditingStyleDelete,
     UITableViewCellEditingStyleInsert
     */
    if (editingStyle==UITableViewCellEditingStyleInsert) {
        //1、insert a data
        NSString *str=[NSString stringWithFormat:@“new the line %d",indexPath.row];
        NSMutableArray *sectionArray=dataSource[indexPath.section];
        [sectionArray insertObject:str atIndex:indexPath.row];
        //2、insert a row in tableview
        [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
    }else if (editingStyle==UITableViewCellEditingStyleDelete){
        //1、remove a row in datasource.
        NSMutableArray *sectionArray=dataSource[indexPath.section];
        [sectionArray removeObjectAtIndex:indexPath.row];
        //2、remove a row in tableview.
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}
//ontrol the edit state in Row
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.section%2==0) {
        return UITableViewCellEditingStyleDelete;
    }
    return UITableViewCellEditingStyleInsert;
}
//Move the row-data in tableview
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{
    NSMutableArray *sourceSectionArray=dataSource[sourceIndexPath.section];
    id sourceData=sourceSectionArray[sourceIndexPath.row];
    [sourceSectionArray removeObject:sourceData];
    //remove it in previous location
    NSMutableArray *destinationSectionArray=dataSource[destinationIndexPath.section];
    [destinationSectionArray insertObject:sourceData atIndex:destinationIndexPath.row];
    //Insert the row in new location
    [tableView reloadRowsAtIndexPaths:@[destinationIndexPath] withRowAnimation:UITableViewRowAnimationNone];
    //refresh a row, but have some error in the application.
    [tableView reloadData];
}
 
The exercise picture :
 
 
 
 
 

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

  1. iOS开发——UI_swift篇&UITableView实现单元格展开与隐藏

    UITableView实现单元格展开与隐藏  关于UITableView的展开的收缩在前面的文章我已经结束,就是使用代理,通知,block传值的时候实现的,当时是使用一个Bool值来实现,最后使用着三 ...

  2. iOS开发——UI_swift篇&UITableView实现索引功能

    UITableView实现索引功能     关于UItableView的索引在平时项目中所见不多,最多的就是跟联系人有关的界面,虽然如此,但是作为一个swift开发的程序必须知道的一个技术点,所以今天 ...

  3. IOS UI 第二篇:基本UI

    1.UI书写:   一个小练习图片如下:     代码如下:     @implementation AppDelegate{    UIControl *control;    UILabel *l ...

  4. iOS开发——UI_swift篇&UItableView实现移动单元格

    UItableView实现移动单元格   1,下面的样例是给表格UITableView添加单元格移动功能: (1)给表格添加长按功能,长按后表格进入编辑状态 (2)在编辑状态下,可以看到单元格后面出现 ...

  5. IOS UI 第一篇:基本UI

    1. UI 书写 最基本创建一个label 标签 写一个first rate :      UILabel *label = [[UILabel alloc] initWithFrame:CGRect ...

  6. IOS设计模式第九篇之备忘录模式

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 备忘录模式捕获和具体化对象的内部状态.换句话说,它可以节省你的东西后来,这种外部状态可以恢复在不违反封装; 也就是说,私人数据是私有的. 怎么用备忘 ...

  7. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  8. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...

  9. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

随机推荐

  1. 【核心研究】消息队列_MessageQueue

    消息队列排队过程中的消息.这第一条消息将首先被处理.但假设消息本身指定要处理的时间.我们必须等待,直到时间的消息处理能力.新闻MessageQueue正在使用Message类的表示,队列中的邮件保存结 ...

  2. Android KK台,联系人列表#集团放置A~Z之前

    更改文件ContactLocaleUtils.java两 (Path:packages/contactsprovider/src/com/android/providers/contacts) 1. ...

  3. ABP应用层——参数有效性验证

    ABP应用层——参数有效性验证 基于DDD的现代ASP.NET开发框架--ABP系列之17.ABP应用层——参数有效性验证 ABP是“ASP.NET Boilerplate Project (ASP. ...

  4. 为代码减负之&lt;二&gt;存储过程(SQL)

    在上篇博客中介绍到了触发器的使用,而且当中也提到了触发器是个特殊的存储过程,那么什么是存储过程呢?他们 两个又究竟有什么差别呢? 事实上最基本的差别就是,触发器是当满足条件时系统自己主动运行的,而存储 ...

  5. Hdu 3962 Microgene (AC自己主动机+矩阵)

    标题效果: 构造一个字符串,使得有两个和两个以上的目标串.长短L这一系列有多少串都. IDEAS: 只有全款减有1一些字符串,没有目标就是答案. 假定数据是非常小的,够用dp解.dp[i][j][k] ...

  6. Asp.net .net(C#) 获取当前命名空间,类名,方法名的方法

    public static string GetMethodInfo() {     string str = "";      //取得当前方法命名空间     str += & ...

  7. 十天学Linux内核之第六天---调度和内核同步

    原文:十天学Linux内核之第六天---调度和内核同步 心情大好,昨晚我们实验室老大和我们聊了好久,作为已经在实验室待了快两年的大三工科男来说,老师让我们不要成为那种技术狗,代码工,说多了都是泪啊,, ...

  8. EpPlus读取生成Excel帮助类+读取csv帮助类+Aspose.Cells生成Excel帮助类

    大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换 //EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls ...

  9. javascript系列之this

    原文:javascript系列之this 引言 在这篇文章里我们将会讨论与执行上下文直接相关的更多细节.讨论的主题就是this关键字.实践证明,这个主题是足够难的并且在不同的执行上下文中判定this的 ...

  10. Cocos2d-x学习笔记(两)Cocos2d-x总体框架

    原创文章.转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38680123 前言 上一节我们简单分析了HelloWorldproje ...