第06天的内容用了整整4天才看完,主要是事情太多了,上班的时间根本就没有时间去看视频学习,晚上回家后稍微有点儿时间看,但是精力却已经不是很充沛了,学习不是很在状态。没有办法,只有慢慢熬,能学一点是一点。
06天学习笔记如下:
1、UITableView 中的三个重要的数据源方法:
显示有多少个组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
返回每一行的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
2、UITableView 设置头标题和尾标题方法:
// 设置头标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
// 设置尾标题
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
3、plist文件里有几个字典就要做几次字典封装转模型:示范代码
// 加载plist文件
+ (NSArray *)carGroupList
{
// 1.获取路径
NSString *path = [[NSBundlemainBundle]pathForResource:@"cars_total"ofType:@"plist"];
NSArray *dicArray = [NSArrayarrayWithContentsOfFile:path];
// 2.字典封转模型
// 创建一个临时可变数组
NSMutableArray *tepArray = [NSMutableArrayarray];
// 变量数组
for (NSDictionary *dicin dicArray) {
ZGCarGroup *carGroup = [ZGCarGroupcarGroupWitcDic:dic];
// 重复添加了array
//[tepArray addObject:carGroup];
#pragma mark -- record
// 字典封装转模型
NSMutableArray *tmpCarArray = [NSMutableArrayarray];
for (NSDictionary *tmpDicin carGroup.cars) {
ZGCar *car = [ZGCarcarsWithDic:tmpDic];
[tmpCarArray addObject:car];
}
#pragma mark -- record
// 重新赋值
carGroup.cars = tmpCarArray;
[tepArray addObject:carGroup];
}
// 返回遍历数组
return tepArray;
}
// cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
#pragma mark -- record
// 1.创建可重用的cell
static NSString *reuseID =@"car";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
if (cell == nil) {
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:reuseID];
}
#pragma mark -- record
// 2.给子控件赋值
ZGCarGroup *carGroup = self.carGroups[indexPath.section];
// 调用属性的get方法进行赋值
cell.textLabel.text = [carGroup.cars[indexPath.row]name];
cell.imageView.image = [UIImageimageNamed:[carGroup.cars[indexPath.row]icon]];
// 3.return cell
return cell;
}
#pragma mark -- record
// 设置右侧索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
// kvc模式
return [self.carGroupsvalueForKeyPath:@"title"];
}
// 1.连线方式设置dateSouce
// 2.代码方式
// self.tableView.dataSource = self;
//设置分割线
self.tableView.separatorInset =UIEdgeInsetsMake(0,10,0, 10);
// 分割线颜色
self.tableView.separatorColor = [UIColorblueColor];
#pragma mark -- record重要概念
// 创建一个可用缓存池
static NSString *availableId =@"hero";
// 从缓冲池里取出cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:availableId];
if (cell == nil) { //可重用cell
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:availableId];
}
// 系统设置cell的附属物
// cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// 自定义cell的附属物
cell.accessoryView = [UIButtonbuttonWithType:UIButtonTypeContactAdd];
设置每行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// // 让每行cell显示不一样
// if (indexPath.row % 2 == 0) {
// return 60;
// } else {
// return 60;
// }
return 60;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
// 点击删除按钮时
if (editingStyle ==UITableViewCellEditingStyleDelete) {
// 删除数据
[self.dateListremoveObjectAtIndex:indexPath.row];
// 刷新数据
[self.tableViewdeleteRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle];
// 点击编辑按钮时
} elseif (editingStyle ==UITableViewCellEditingStyleInsert) {
// 添加数据
[self.dateListinsertObject:@"I'm The King Of The World!"atIndex:indexPath.row +1];
// 刷新表格
// 新建一个path
NSIndexPath *path = [NSIndexPathindexPathForRow:indexPath.row +1inSection:indexPath.section];
[self.tableViewinsertRowsAtIndexPaths:@[path]withRowAnimation:UITableViewRowAnimationMiddle];
}
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
// 取出源
#pragma mark -- record
id source = self.dateList[sourceIndexPath.row];
// 删除源
[self.dateListremoveObjectAtIndex:sourceIndexPath.row];
// 插入源到指定位置
#pragma mark -- record
[self.dateListinsertObject:sourceatIndex:destinationIndexPath.row];
}
// 返回编辑样式,默认是删除
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
returnUITableViewCellEditingStyleInsert;
}
补充:
1、应用程序管理,代理实现,总结
步骤:
>.定义代理协议(命名方式:类名+Delegate)
@class ZGAppIcon,ZGAppInfoView;
// 1.定义协议
@protocol ZGAppInfoViewDelegate <NSObject>
@optional
- (void)appInfoViewClickDownload:(ZGAppInfoView *)appInfoView;
@end
>.定义代理属性 (内存管理用weak,防止弱引用,OC对象用ID来创建,属性名一般是delegate)
// 2.定义代理属性
@property (nonatomic,weak)id <ZGAppInfoViewDelegate>delegate;
>.向代理发送消息 (当用户点击的时候,给定义的代理方法发送一条消息)
- (IBAction)downLoadBtn:(UIButton *)sender {
#pragma mark --02
// 取消和用户的交互
sender.enabled = NO;
// 3.向代理发送消息
if ([self.delegaterespondsToSelector:@selector(appInfoViewClickDownload:)]) {
[self.delegateappInfoViewClickDownload:self];
}
}
>.创建Label对象
@interface ZGLabel : UILabel
// 显示label,并取得应用名字
+ (void)showLabel:(UIView *)superView appName:(NSString *)appName;
@end
>.使viewController遵循代理协议,并设置代理对象 (必须要设置代理对象,不然会运行后会出错)
// 4.设置代理对象
subView.delegate = self;
>.调用代理
// 5.调用代理
- (void)appInfoViewClickDownload:(ZGAppInfoView *)appInfoView
{
[ZGLabel showLabel:self.viewappName:appInfoView.appInfo.name];
}
// 1.创建UIAlertController
UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"提示" message:@"恭喜过关!" preferredStyle:UIAlertControllerStyleAlert];
// 2.调用 presentViewController 方法来显示UIAlertController
[self presentViewController:controller animated:nil completion:nil];