IOS——中级篇 --TableView以及Cell

?????
//? 设置tableView的行高
??? self.tableView.rowHeight = 100;
//? 设置tableView分割线的样式
//? UITableViewCellSeparatorStyleNone 不显示分割线
//? UITableViewCellSeparatorStyleSingleLine? 显示分割线(默认)

??? self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

??? self.tableView.allowsSelection = NO; // 不允许选中

//? 设置分割线的颜色
??? self.tableView.separatorColor = [UIColor orangeColor];

?? //? 让没有内容单元格不显示[小技巧]

??? self.tableView.tableFooterView = [[UIView alloc] init];

//? 设置(top,left,bottom,right)[top与bottom无效]

??? self.tableView.separatorInset = UIEdgeInsetsMake(0,10, 0, 10);

在stroyborud 加载cell

??? CZFriendCell *cell = [tableView dequeueReusableCellWithIdentifier:@"friend"];

??? return cell;

????

dataSource 常用方法

/**

?*? 多少个分组 ?numberOfSectionsInTableView?

?*/
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView

{

??? return 2;
}

/**

?*? 一个分组有多少行 ?numberOfRowsInSection

?*/
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

? ? return 2;

}

/**

?*? 每一个分组显示什么内容 ?cellForRowAtIndexPath

?*/
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

? ?

//1创建Cell

static NSString *reusedId = @"item";
??? //??? UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedId forIndexPath:indexPath];--------->wrong!!!!!
??? UITableViewCell *cell =[ tableView dequeueReusableCellWithIdentifier:reusedId ];
???
??? if (cell ==nil) {
??????? cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedId];

??? }

// 2.获取数据

??? LYGroup *group = _groups[indexPath.section];
??? LYItem *item = group.items[indexPath.row];
??? cell.textLabel.text =item.title;

??? cell.imageView.image =[UIImage imageNamed:item.icon];

//3.返回cell

? ? ?return cell;

}

/**

?*? 分组(头部)标题?titleForHeaderInSection

?*/
- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

{

? ? ? ? ??return @“头部”;

}

/**

?*? 分组(尾部)描述 ?titleForFooterInSection

?*/
- (NSString *) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{

? ? ? ? ??return @“尾部”;

}

/**

?*? 分组索引 ?sectionIndexTitlesForTableView

?*/
- (NSArray *) sectionIndexTitlesForTableView:(UITableView *)tableView
{
??? //返回groups数组中,所有group对象的title属性,返回的是数组
??? return [self.carGroups valueForKeyPath:@"title"];

}

代理常用方法

#pragma mark - 代理方法
/**

?*? 设置每一行的行高 ?heightForRowAtIndexPath

?*/
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
??? if (indexPath.row % 2 == 0) {
??????? return 60;
??? }else{
??????? return 100;
??? }
}
/**

?*? 已经选中某一行?didSelectRowAtIndexPath

?*/
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// ? zd long, long long ,int
??? NSLog(@"用户选中了第%zd组,第%zd行",indexPath.section,indexPath.row);
}

//当取消选中某一行时候执行 ?didDeselectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
?? NSLog(@"用户取消选中了第%zd组,第%zd行",indexPath.section,indexPath.row);

}

CELL 常用属性

//? UITableViewCell *cell = [[UITableViewCell alloc] init];

//? UITableViewCellStyleDefault 只显示图标和名称
//? UITableViewCellStyleSubtitle 显示图标,名称,描述<下面>
//? UITableViewCellStyleValue1 显示图标,名称,描述<后面>

//? UITableViewCellStyleValue2 显示名称,描述<后面>

//? 背景视图color

??? UIView *backView = [[UIView alloc] init];
??? backView.backgroundColor = [UIColor redColor];
// backgroundView的优先级高于backgroundColor
??? cell.backgroundView = backView;
//? 背景颜色
??? cell.backgroundColor = [UIColor blueColor];

??? UIView *selectedView = [[UIView alloc] init];
??? selectedView.backgroundColor = [UIColor blueColor];
//? 选中背景视图
??? cell.selectedBackgroundView = selectedView;
???
//? 指示器相关
//? 设置指示器的类型
??? cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//? 指示器视图

??? cell.accessoryView = [[UISwitch alloc] init];

/**

?*??从缓存中取cell? ? //1创建Cell // 2.获取数据 //3.返回cell

?*/

// 定义重用标识
? ? static NSString *reuseId = @"heroCell";
???
// 去缓冲池中查找重用的cell
?? UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
//? 如果没有找到可以重用cell就创建新的cell
??? if (cell == nil) {
???????? cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseId];
//??????? NSLog(@"创建cell");

??? }

//????? 用来刷新指定的行

??????? [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];

?//????? 刷新表格

[self.tableView reloadData];

//????? 滚动让某个区域可见

[self.tableView scrollRectToVisible: (CGRect)rect animated:YES];

//滚动到哪一行

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.tgs.count -1 inSection:0];

??? [self.tableView scrollToRowAtIndexPath:indexPath?atScrollPosition:(UITableViewScrollPositionMiddle) animated:YES];

?

?//?第一组和最顶部的间距 headerView

??? self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 15)];

??? //?设置 组间距 15

??? self.tableView.sectionHeaderHeight = 15;
??? self.tableView.sectionFooterHeight = 0;
???
??? //设置tableView的背景图片
??? self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg"]];

? ? //重写init方法,设置分组

  • - (instancetype)init{

??? return [super initWithStyle:UITableViewStyleGrouped];

?

UITableViewHeaderFooterView

重写? [[self alloc] initWithReuseIdentifier:reuseId];

UITableViewCell

重写 [[self alloc]initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:ID];

时间: 2024-10-13 16:08:13

IOS——中级篇 --TableView以及Cell的相关文章

iOS 点击tableView的cell,让其滚到屏幕顶部

点击tableView的cell,让其滚到屏幕顶部,很多电商的分类模块,都采用这种做法 1. 示例代码 - (void)viewDidLoad { [super viewDidLoad]; [self addTableView]; } #pragma mark - 创建tableView - (void)addTableView { UITableView *tableView = [[UITableView alloc]init]; tableView.frame = self.view.bo

IOS中级篇—— 多线程--NSOperation

NSOperation 操作? 任务是对代码的封装, 操作是对任务的封装 --目的:就是可以随时的暂停/恢复/取消任务; NSOperation 对GCD的封装. OC 运用起来更加方便. 抽象类. 车 NSOperation的使用: <1> 操作直接调用 start方法,就是在当前线程执行(Block中封装的任务数大于1的情况除外). <2> 就是将操作放在队列中.自动的帮我们开启线程,来执行操作. 两个子类: NSInvocationOperation: 调用 ? ? ? 1.

IOS中级篇 —— 多线程 - GCD

GCD 是c语言的框架,不需要手动管理内存 是一个面向任务   不是面向线程,不需要管理线程的生命周期 GCD 任务/队列 执行函数 任务:Block  任务都封闭在Block中.  —— 线程执行 队列:存放任务    FIFO (先进先出的原则) GCD中的队列: 串行队列:想要任务按顺序执行 //    创建一个串行队列 dispatch_queue_t serialQueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SE

IOS中级篇 —— 日期时间对象

结合NSCalendar和NSDate能做更多的日期\时间处理 获得NSCalendar对象 NSCalendar *calendar = [NSCalendar currentCalendar];?获得年月日 - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)date; //创建日期 NSDate?*d = [NSDate?date]; //创建日期对象 NSCalendar?*ca =

IOS中级篇——何时使用copy,strong,weak,assign关键字 定义属性

? 父类指针可以指向子类对象 ? //定义block别名. typedef void (^LYItemOption)(); @interface LYItemArrow : LYItem@property(nonatomic,strong) Class desController; @property(nonatomic,copy) LYItemOption option; ? ? 1.strong :除NSString\block以外的OC对象 ? @property(nonatomic,st

IOS中级篇 —— Autoresizing

? UIView *blueView = [[UIView alloc] init]; ??? [self.view addSubview:blueView]; ??? blueView.backgroundColor = [UIColor blueColor]; ??? ??? blueView.center = self.view.center; ??? blueView.bounds = CGRectMake(0, 0, 150, 150); ??? self.blueView = blu

IOS中级篇 —— 关于深复制和浅复制

?深复制(深拷贝,内容拷贝,deep?copy) ?源对象和副本对象是不同的两个对象 ?源对象引用计数器不变,?副本对象计数器为1(因为是新产生的) ?本质是:产生了新的对象 ? ?浅复制(浅拷贝,指针拷贝,shallow?copy) ?源对象和副本对象是同一个对象 ?源对象(副本对象)引用计数器?+?1,?相当于做一次retain操作 ?本质是:没有产生新的对象

IOS中级篇 —— 手动内存管理

retainCount?? //dealloc方法,是对象的临终遗言的方法 //对象被销毁的时候,会默认的调用该方法 //注意:dealloc 方法是系统根据引用计数器的值,自动调用的, 野指针 内存泄露 @property??参数 @class 使用 循环retain解决方法 自动释放池?? @autoreleasepool

IOS中级篇 —— NSFileManager常用方法

[fileManager isDeletableFileAtPath:<#(NSString *)#>]; 判断一个路径是否可删除 [fileManager isWritableFileAtPath:<#(NSString *)#>];??判断一个路径是否可写 [fileManager isReadableFileAtPath:<#(NSString *)#>];??判断一个路径是否可读 [fileManager fileExistsAtPath:<#(NSStr