IOS UI学习之UITableView

本文记录了从cocoachina代码库中学习到的关于UITableView的小Demo及其关键知识点,包括如何获取plist中的信息、数据源的使用、KVC和KVO的运用等。此外,还提供了数据懒加载、单元格重用等实践经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我自认为UI这部分是我最头疼的一件事了,不管是android的UI或者html + css,这两部分都没学好,基本知识都是知道的,但是就是做不出来漂亮的界面,希望现在开始搞IOS了,不要再像前面学习的那样只知道皮毛了。今天看到在cocoa china上面的代码库中,有人分享了关于UITableView的一个小小的Demo,但是感觉做得非常好,代码也写的非常漂亮。通过看他的代码总结了一些有用的知识,在这边记录一下吧.(本人也是刚开始学习IOS)

下载地址为:http://code.cocoachina.com/detail/275474/%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84UITableView%E4%BD%BF%E7%94%A8%EF%BC%8C%E7%BA%AF%E6%89%8B%E5%B7%A5%E6%89%93%E9%80%A0/

看代码总结第一个知识点:如果一个类的属性与该方法名称相同,并且属性类型与方法的返回值一样,那么这个方法就表示该属性的get方法

第二点:如何读取plist中的相关信息

首先通过NSBundle获取资源路径 NSBundle *mainBundle = [NSBundle mainBundle];  NSString *resource = [mainBundle pathForResource:@"demo" forType:@"plist"];

这样只是拿到了资源的路径,下面就要通过看plist中的root的类型是什么,如果是NSArray 那么就要这么得到数据 NSArray *array = [NSArray arrayWithContentOfFile:resource];

后面就从数组中取数据就可以了。NSDictionary 也是一样的。

第三点:代码要写的漂亮一定要有一定的规范;比如:

#pragma mark -数据懒加载
- (NSArray *) carList
{
    if (!_carList) {
        NSString        *path         = [[NSBundle mainBundle] pathForResource:@"cars_simple" ofType:@"plist"];
        NSArray         *array        = [NSArray arrayWithContentsOfFile:path];
        NSMutableArray  *muTableArray = [NSMutableArray array];
        
        for (NSDictionary * dic in array)
        {
            CarNameEntity *carName = [CarNameEntity carWithDictionary:dic];
            [muTableArray addObject:carName];
        }
         _carList = muTableArray;
    }
    return _carList;
}
第四:通过设置数据源来显示数据,但是在数据源方法中怎么重用Cell对象

#pragma mark -设置单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID         = @"cell";
    UITableViewCell *cell       = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell  = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    CarNameEntity *carName = self.carList[indexPath.section];
    cell.textLabel.text    = carName.cars[indexPath.row];
    //附加在单元格后端的样式
    cell.accessoryType     = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}
其他的基本没什么了。看数据源里面要实现那些方法都实现就好了。

第五点:对于类的属性中如果有与NSDictionary 的key 相同,并且对应的值类型也相同的item,可以使用KVC模式,来给对象属性赋值

比如如果一个对象中有以下属性:

@property(nonatomic , copy) NSString *title;
@property(nonatomic , copy) NSString *desc;
@property(nonatomic , strong) NSArray  *cars;
则在初始化构造函数中可以使用

if (self = [super init]) {
        //kvc的方法
        [self setValuesForKeysWithDictionary:carDictionary];
    }
return self;
来初始化数据。

第六点:说到KVC,让我想到了看书时候看到的KVO,如果属性是readonly,编译器只会为其生成get方法,但是运行期如果使用setValue forKey的话,也是可以为属性赋值的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值