UI学习第06天

  第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;

}


4、性能优化,创建可重用cell的代码示范:

// 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;

    

}


5、设置UITableView右侧索引的方法:

#pragma mark -- record

// 设置右侧索引

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

{

    // kvc模式

    

    return [self.carGroupsvalueForKeyPath:@"title"];

}


6、设置UITableView的dateSource的2种方法:

// 1.连线方式设置dateSouce

    // 2.代码方式

    // self.tableView.dataSource = self;


7、设置 UITableView的分割线的颜色:

 //设置分割线

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

    // 分割线颜色

    self.tableView.separatorColor = [UIColorblueColor];


8、重要知识点--创建可重用cell:

#pragma mark -- record重要概念

    // 创建一个可用缓存池

    static NSString *availableId =@"hero";

    // 从缓冲池里取出cell

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:availableId];

    if (cell == nil) {                                                           //可重用cell

        cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:availableId];

    }


9、设置cell的附属物的2中方法:

// 系统设置cell的附属物

    // cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    

    

    // 自定义cell的附属物

    cell.accessoryView = [UIButtonbuttonWithType:UIButtonTypeContactAdd];



10、 UITableViewDelegate代理方法:

设置每行的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

//    // 让每行cell显示不一样

//    if (indexPath.row % 2 == 0) {

//        return 60;

//    } else {

//        return 60;

//    }

    return 60;

}


11、修改cell的方法:

- (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];

    }

}


12、设置拖动块儿:

- (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];

}


13、使用代理方法来删除或者插入数据:

// 返回编辑样式,默认是删除

- (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];

    

}


补充2、关于 UIAlertController (警告框的用法):
苹果在iOS8之后,使用 UIAlertController、 UIAlertAction来代替之前的 UIAlertView和 UIActionSheet

UIAlertController 的创建与使用

// 1.创建UIAlertController

UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"提示" message:@"恭喜过关!" preferredStyle:UIAlertControllerStyleAlert];

// 2.调用 presentViewController 方法来显示UIAlertController

[self presentViewController:controller animated:nil completion:nil];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值