collectionview相关iOS专题iOS进阶指南

UITableView

2016-01-30  本文已影响190人  Z了个L
/**
 *  每当一个cell进入视野范围内就会调用1次
 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 0.定义一个重用标识
    static NSString *ID = @"wine";
    // 1.去缓存池取可循环利用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    // 2.如果缓存池没有可循环利用的cell,自己创建
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }

    // 3.设置数据
    cell.textLabel.text = [NSString stringWithFormat:@"第%zd行数据",indexPath.row];

    return cell;
}

UITableViewController的注意点

UITableView的两种样式

UITableView的属性

// 设置每一行cell的高度
    self.tableView.rowHeight = 80;
// 设置每一组的头部标题高度
    self.tableView.sectionHeaderHeight = 50;
// 设置每一组的尾部标题高度
    self.tableView.sectionFooterHeight = 50;

// 设置分割线的颜色
    self.tableView.separatorColor = [UIColor redColor];
// 设置分割线的样式
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
// 设置表头控件---这里主要应用是打广告
    self.tableView.tableHeaderView = [[UISwitch alloc] init];
// 设置表尾控件---这里主要应用是加载数据
    self.tableView.tableFooterView = [[UISwitch alloc] init];
// 设置索引条的文字颜色
    self.tableView.sectionIndexColor = [UIColor orangeColor];
// 设置索引条的背景颜色
    self.tableView.sectionIndexBackgroundColor = [UIColor yellowColor];

// 方法一:设置分割线的颜色
    self.tableView.separatorColor = [UIColor clearColor];
// 方法二:设置分割线的样式
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

UITableViewDelegate方法

/**
 *  当用户点击(选中)某一行cell就会调用这个方法
 */
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"选中了:%zd",indexPath.row);
}

/**
 *  当用户取消点击(选中)某一行cell就会调用这个方法
 */
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"取消选中了:%zd",indexPath.row);
}

/**
 *  返回每一组的头部高度
 */
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{

}

/**
 *  返回每一组的尾部高度
 */
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{

}

/**
 *  返回每一行cell的高度
 */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row % 2 == 0) {
        return 50;
    } else {
        return 100;
    }
}

/**
 *  返回每一组的头部控件
 */
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    return [UIButton buttonWithType:UIButtonTypeContactAdd];
}

/**
 *  返回每一组的尾部控件
 */
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    return [UIButton buttonWithType:UIButtonTypeContactAdd];
}

UITableViewDataSource方法

section 第几组,0,1,2,...

indexPath 确定每组中的每一行,比如第0组第0行,第1组第0行,...indexPath.section---第几组,indexPath.row---第几行


/********************************************************
 1> plist解析:
 以后遇到像这种复杂的plist,一层一层的往下解析.
 最终的目的就是将所有的字典转成模型.
 如果plist中字典在一个数组中,将来转出来的模型也放在一个数组中.
 也就是将字典数组转成模型数组.

 2> plist的好处:方便管理数据
 *******************************************************/


/**
 *  告诉tableView一共有多少组数据
 */
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView


/**
 *  告诉tableView第section组有多少行
 */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

/**
 *  告诉tableView每一行显示的内容(tableView每一行的内容是是第一个UITableViewCell)
 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

/**
 *  告诉tableView每一组的头部标题
 */
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

/**
 *  告诉tableView每一组的尾部标题
 */
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

/**
 *  返回索引条的文字
 */
- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
//    NSMutableArray *titles = [NSMutableArray array];
//    for (XMGCarGroup *group in self.carGoups) {
//        [titles addObject:group.title];
//    }
//    return titles;

    // 抽取self.carGoups这个数组中每一个元素(XMGCarGroup对象)的title属性的值,放在一个新的数组中返回
    return [self.carGoups valueForKeyPath:@"title"];
}

UITableViewCell属性

// 设置右边显示的指示控件
// accessoryView的优先级 > accessoryType
//    cell.accessoryView = [[UISwitch alloc] init];

    // 设置右边显示的指示样式
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // 设置cell选中的样式
    // 设置cell的选中样式无
//    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    // 下面三种方式在iOS7之后,表现形式一样了,都是灰色
//    cell.selectionStyle = UITableViewCellSelectionStyleBlue;
//    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
//    cell.selectionStyle = UITableViewCellSelectionStyleGray;


    // 设置cell的背景控件
    // backgroundView的优先级 > backgroundColor
//    UIView *bg = [[UIView alloc] init];
//    bg.backgroundColor = [UIColor blueColor];
//    cell.backgroundView = bg;

    // 设置cell的背景颜色
//    cell.backgroundColor = [UIColor redColor];

    // 设置cell选中的背景view
    UIView *seletedBg = [[UIView alloc] init];
    seletedBg.backgroundColor = [UIColor yellowColor];
    cell.selectedBackgroundView = seletedBg;


// 下面代码可以调换顺序,效果一样
cell.backgroundColor = [UIColor redColor];

UIView *bg = [[UIView alloc] init];
bg.backgroundColor = [UIColor blueColor];
cell.backgroundView = bg;

效果图片:

    // 设置cell选中的背景view
    UIView *seletedBg = [[UIView alloc] init];
    seletedBg.backgroundColor = [UIColor yellowColor];
    cell.selectedBackgroundView = seletedBg;

效果图片

#import "ViewController.h"
#import "XMGTestCell.h"

@interface ViewController ()

@end

@implementation ViewController

NSString *ID = @"wine";
- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.rowHeight = 100;

    // 注册 ID这个标识 对应的 cell类型 为UITableViewCell这种类型
    [self.tableView registerClass:[XMGTestCell class] forCellReuseIdentifier:ID];
}

#pragma mark - 数据源方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 200;
}

/**
 *  每当一个cell进入视野范围内就会调用1次
 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.去缓存池取可循环利用的cell
    XMGTestCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    // 2.设置数据
    cell.textLabel.text = [NSString stringWithFormat:@"第%zd行数据",indexPath.row];
    return cell;

}
@end
    // 设置索引条的文字颜色
    self.tableView.sectionIndexColor = [UIColor orangeColor];
    // 设置索引条的背景颜色
    self.tableView.sectionIndexBackgroundColor = [UIColor yellowColor];

// tableView Scroll to bottom
- (void)tableViewScrollToBottom {
    if (self.chatModel.dataSource.count==0)
        return;
    
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.chatModel.dataSource.count-1 inSection:0];
    [self.chatTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
上一篇下一篇

猜你喜欢

热点阅读