UITableView
重用机制:当我们使用tableView时,系统只会创建屏幕中显示的cell个数+1,当cell滑出可视范围时,会将此Cell放入重用池,当有新的cell滑进可视范围时,会先到重用池找有没有可以使用的cell(根据标识),如果能找到,则拿出来直接用,否则再创建新的cell
#import "ViewController.h"
@interfaceViewController ()<UITableViewDataSource,UITableViewDelegate>
{
UITableView *tabel;
NSMutableArray *array;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
array = [NSMutableArrayarrayWithObjects:@"123"@"456",@"789", nil];
tabel = [[UITableViewalloc]initWithFrame:self.view.boundsstyle:UITableViewStyleGrouped];//UITableViewStyleGrouped组与组之间有空隙UITableViewStylePlain是直接连在一起的
tabel.delegate = self;
tabel.dataSource = self;
[self.view addSubview:tabel];
tabel.rowHeight = 80;//设置tabel的行高
//tabel.separatorStyle = UITableViewCellSeparatorStyleNone;//分割线样式,可以不写。默认有线
tabel.separatorColor = [UIColorblueColor];//设置分割线的颜色
// UIImageView *view = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"2.jpg"]];
// tabel.backgroundView = view;//背景图片的加载,会被cell掩盖,慎用!!!!
// UIView *vc = [[UIView alloc]initWithFrame:CGRectMake(0, 120, 0, 150)];
// vc.backgroundColor = [UIColor grayColor];
// tabel.tableHeaderView = vc;//在tabel顶部加载一个view,其frame只有高有效
UIButton *button = [UIButtonbuttonWithType:UIButtonTypeCustom];
button.backgroundColor = [UIColor grayColor];
button.frame = CGRectMake(300, 20, 60, 60);
[button setTitle:@"+"forState:UIControlStateNormal];
[button addTarget:selfaction:@selector(addcell) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
-(void) addcell
{
[array addObject:@"147"];
[tabelreloadData];
}
-(CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return100;//每组顶部视图的高度
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return30;//每组底部视图的高度
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
//设置每行的高度
if (indexPath.row == 0) {
return 80;
}
return 40;
}
//-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
//{
// //自定义每组顶部视图,可以在此处给视图顶部添加一些控件
// UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 40)];
// view.backgroundColor = [UIColor redColor];
// return view;
//
//}
//-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
// //自定义尾部视图
// UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];
// view.backgroundColor = [UIColor purpleColor];
// return view;
//
//}
//-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
//{
//
// return 3;//设置tabel的组数,默认是一组
//}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// if (section == 0) {
// return 5;
// }else if (section == 1){
// return 7;
// }
// return 9;//设置tabel没组的行数
return array.count;
}
//提交修改动作: 再执行删除之前,需要先移除数组中对应的元素,
-(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[array removeObjectAtIndex:indexPath.row];
[tabeldeleteRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle];//删除行
}
//是否允许编辑
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
returnYES;
}
//cell被选中
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"----%zi",indexPath.row);
// [tableView deselectRowAtIndexPath:indexPath animated:YES];//当cell被点击时,取消选中状态
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *inde = @"cell";
// NSString *identifier = [NSString stringWithFormat:@"cell%zi%zi",indexPath.section,indexPath.row];//给每行设置不同的标识,来处理重用机制
UITableViewCell *cell = [tabeldequeueReusableCellWithIdentifier:inde ];//根据重用标识,到重用池找对应的cell
// UITableViewCell *cell = [tabel cellForRowAtIndexPath:indexPath];//处理重用机制不好,不建议使用
if (cell == nil) {
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:inde];//创建一个cell,设置其样式以及标识
}
cell.textLabel.text = @""; //先清理,在使用,解决重用机制
// cell.textLabel.text = [NSString stringWithFormat:@"第%zi行,第%zi组",indexPath.row,indexPath.section];
// cell.imageView.image = [UIImage imageNamed:@"58"];
cell.textLabel.text = array[indexPath.row];
// if (indexPath.row ==1) {
// cell.textLabel.text = @"123";//如果有多行,且没有赋满值,滑动时回出现标题重用
// }
cell.detailTextLabel.text = @"详细信息";
//给不同行不同列添加图片
if (indexPath.section == 0&& indexPath.row == 1) {
cell.imageView.image = [UIImage imageNamed:@"1"];
}
if (indexPath.section == 1 && indexPath.row ==1) {
cell.imageView.image = [UIImage imageNamed:@"2"];
}
// cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;//提示用户可以点,点击后跳至下级界面
//cell.accessoryType =UITableViewCellAccessoryDetailDisclosureButton;//提示用户可点,点击按钮(叹号)会有相关提示弹出,点击cell之后跳至下级界面
cell.accessoryType = UITableViewCellAccessoryDetailButton;//提示用户可点,点击按钮(叹号)会有相关提示弹出
return cell;//将设置好的cell返回
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end