UITableView
2019-06-07 本文已影响0人
习惯了_就好
UITableView展示数据的过程
- 调用数据源的下面方法得知一共有多少组数据
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- 调用数据源的下面方法得知每一组有多少行数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- 调用数据源的下面方法得知每一行显示什么内容
- (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