我自认为UI这部分是我最头疼的一件事了,不管是android的UI或者html + css,这两部分都没学好,基本知识都是知道的,但是就是做不出来漂亮的界面,希望现在开始搞IOS了,不要再像前面学习的那样只知道皮毛了。今天看到在cocoa china上面的代码库中,有人分享了关于UITableView的一个小小的Demo,但是感觉做得非常好,代码也写的非常漂亮。通过看他的代码总结了一些有用的知识,在这边记录一下吧.(本人也是刚开始学习IOS)
看代码总结第一个知识点:如果一个类的属性与该方法名称相同,并且属性类型与方法的返回值一样,那么这个方法就表示该属性的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的话,也是可以为属性赋值的。