iOS

UITableView

2019-06-07  本文已影响0人  习惯了_就好

UITableView展示数据的过程

  1. 调用数据源的下面方法得知一共有多少组数据
  1. 调用数据源的下面方法得知每一组有多少行数据
  1. 调用数据源的下面方法得知每一行显示什么内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

UITableViewCell:
* UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行

* UITableViewCell内部有个默认的子视图:contentView,contentView是UITableViewCell所显示内容的父视图,可显示一些辅助指示视图
* 辅助指示视图的作用是显示一个表示动作的图标,可以通过设置UITableViewCell的accessoryType来显示,默认是UITableViewCellAccessoryNone(不显示辅助指示视图)
* 还可以通过cell的accessoryView属性来自定义辅助指示视图(比如往右边放一个开关

contentView下默认有3个子视图
* 其中2个是UILabel(通过UITableViewCell的textLabel和detailTextLabel属性访问)
* 第3个是UIImageView(通过UITableViewCell的imageView属性访问)
* UITableViewCell还有一个UITableViewCellStyle属性,用于决定使用contentView的哪些子视图,以及这些子视图在contentView中的位置


#import "ViewController.h"
#import "HeroInfo.h"

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
@property(nonatomic,strong) NSArray * heros;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //设置数据源
    self.myTableView.dataSource = self;
    //设置代理
    self.myTableView.delegate = self;
    //取消弹性回弹
    self.myTableView.bounces = NO;
    //取消垂直滚动条
    self.myTableView.showsVerticalScrollIndicator = NO;
    //设置行高,每一行高度一样,每行高度要设置的不一样可以使用 heightForRowAtIndexPath
    self.myTableView.rowHeight = 80;
    
    //UITableView头部view和底部view
    self.myTableView.tableHeaderView = [[UISwitch alloc] init];
    self.myTableView.tableFooterView = [[UISwitch alloc] init];
    
    //设置分割线
//    self.myTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
//    self.myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    //分割线的颜色,传比例,需要除255.0
    self.myTableView.separatorColor = [UIColor colorWithRed:255 / 255.0 green:0 blue:0 alpha:255 / 255.0];
}

//隐藏状态栏
- (BOOL)prefersStatusBarHidden
{
    return YES;
}

//有多少个分组,可以不实现,默认就是1组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

//每个分组有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.heros.count;
}

//每行的样式
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//    cell优化
    static NSString * ID = @"A";
   UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    
    HeroInfo * hero = self.heros[indexPath.row];
    cell.textLabel.text = hero.name;
    cell.detailTextLabel.text = hero.intro;
    [cell.imageView setImage:[UIImage imageNamed:hero.icon]];
    
    //设置右侧的view
//    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"173890255948"]];
    
    //设置背景
//    UIView * view = [[UIView alloc] init];
//    view.backgroundColor = UIColor.greenColor;
//    cell.backgroundView = view;
    //设置选中后的背景
//    UIView * selectedView = [[UIView alloc] init];
//    [selectedView setBackgroundColor:[UIColor redColor]];
//    cell.selectedBackgroundView = selectedView;
    return cell;
}

//group的头部内容,悬浮到在group顶部
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return @"group的头部";
}

//group的头部内容,悬浮到group底部
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"173890255948"]];
}

//设置行高,每行高度可以定制,需要实现UITableViewDelegate代理
//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    if (indexPath.row % 2 == 0) {
//        return 100;
//    }else{
//        return 50;
//    }
//}

//选中第几行
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    HeroInfo * info = self.heros[indexPath.row];
    
    //初始化UIAlertController
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:nil preferredStyle:UIAlertControllerStyleAlert];
    
    //添加按钮
    UIAlertAction * cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    [alertController addAction:cancel];
    
    UIAlertAction * sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action){
        UITextField * field = alertController.textFields.lastObject;
        info.name = field.text;
        
        //UITableView刷新数据
//        [self.myTableView reloadData];
        
        [self.myTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
    }];
    [alertController addAction:sureAction];
    
    //添加文本
    [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.text = info.name;
    }];
    
    //将UIAlertAction添加到控制器中
    [self presentViewController:alertController animated:YES completion:nil];
}


//取消选中第几行
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    
}

//设置右侧字母导航时可以使用
//- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView
//{
//    return [];
//}

//懒加载方式获取数据,从plist获取数据
-(NSArray *)heros{
    if (_heros == nil) {
        NSString * path = [[NSBundle mainBundle] pathForResource:@"heros" ofType:@"plist"];
        NSArray * array = [NSArray arrayWithContentsOfFile:path];
        NSMutableArray * mutable = [NSMutableArray array];
        for (NSDictionary * dic in array) {
            HeroInfo * heroInfo = [[HeroInfo alloc] initWidthDic:dic];
            [mutable addObject:heroInfo];
        }

        _heros = mutable;
    }
    return _heros;
}
@end

上一篇下一篇

猜你喜欢

热点阅读