1、单元格样式UITableViewCellStyleDefault 即默认样式是不显示小的Label简介的即不显示detailTextLabel上的Text的。
UITableViewCellStyleSubtitle样式:都显示,并且detailTextLabel上的Text作为小字体简介放在textLabel大字体标签下边。
UITableViewCellStyleValue1样式:都显示。但是detailTextLabel上的Text放在textLabel的右面。
UITableViewCellStyleValue2样式:不显示图片框。
2、去掉状态栏的方法:添加以下方法。
-(BOOL)prefersStatusBarHidden
{
return YES;
}
3、如果想在单元格右边显示一个组件,方法如下:
(1)系统提供的的控件,如箭头,详细信息按钮,等可以用UITableViewCell类的accessoryType属性进行设置。例如:
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // 添加箭头
(2)可以自定义单元格右边的accessory。如:
cell.accessoryView = [[UISwitch alloc] init]; // 添加按钮
4、统一设置UITableView的行高。
1>(在每一行行高都相同的情况下)
在viewDidLoad方法中添加以下语句即可:
self.tableView.rowHeight = 60;
2> 对于每行行高都不一样的情况,无法通过tableView.rowHeight来实现,此时只能通过一个代理方法实现。具体如下:
先让当前控制器遵守UITableViewDelegate代理协议。然后添加方法如下即可:
-(CGFloat)tableView :(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
int rowNum = indexPath.row;
if(rowNum %2 ==0){
return 60;
}else{
return 100;
}
}
代码验证:
(1)(新建或加载plist文件)
(2)打开plist文件,查看对象字典属性。
(3)根据字典的各个键与对应值的类型新建model类
(4)为控制器添加数组属性,并重写数组属性的get方法实现plist文件的懒加载。
(5)添加UITableView组件属性,因为默认就是单组风格。不用特地设置。在viewDidLoad方法中进行属性设置。
(6)让控制器类遵守UITableViewDataSource数据源协议和UItableViewDelegate代理 协议,并设置自身的代理对象与数据源对象为当前控制器对象。即self.tableView.delegate = self;
self.tableView.dataSource=self;
(7)添加数据源协议中的方法
UITableViewCellStyleSubtitle样式:都显示,并且detailTextLabel上的Text作为小字体简介放在textLabel大字体标签下边。
UITableViewCellStyleValue1样式:都显示。但是detailTextLabel上的Text放在textLabel的右面。
UITableViewCellStyleValue2样式:不显示图片框。
2、去掉状态栏的方法:添加以下方法。
-(BOOL)prefersStatusBarHidden
{
return YES;
}
3、如果想在单元格右边显示一个组件,方法如下:
(1)系统提供的的控件,如箭头,详细信息按钮,等可以用UITableViewCell类的accessoryType属性进行设置。例如:
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // 添加箭头
(2)可以自定义单元格右边的accessory。如:
cell.accessoryView = [[UISwitch alloc] init]; // 添加按钮
4、统一设置UITableView的行高。
1>(在每一行行高都相同的情况下)
在viewDidLoad方法中添加以下语句即可:
self.tableView.rowHeight = 60;
2> 对于每行行高都不一样的情况,无法通过tableView.rowHeight来实现,此时只能通过一个代理方法实现。具体如下:
先让当前控制器遵守UITableViewDelegate代理协议。然后添加方法如下即可:
-(CGFloat)tableView :(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
int rowNum = indexPath.row;
if(rowNum %2 ==0){
return 60;
}else{
return 100;
}
}
代码验证:
(1)(新建或加载plist文件)
(2)打开plist文件,查看对象字典属性。
(3)根据字典的各个键与对应值的类型新建model类
(4)为控制器添加数组属性,并重写数组属性的get方法实现plist文件的懒加载。
(5)添加UITableView组件属性,因为默认就是单组风格。不用特地设置。在viewDidLoad方法中进行属性设置。
(6)让控制器类遵守UITableViewDataSource数据源协议和UItableViewDelegate代理 协议,并设置自身的代理对象与数据源对象为当前控制器对象。即self.tableView.delegate = self;
self.tableView.dataSource=self;
(7)添加数据源协议中的方法
、、、、
plist文件如下:
将相应图片资源拉进工程中一个自设的文件夹,在Supporting files下新建model类如下:
参照文件中字典的属性,编辑Hero.h如下:
//
// Hero.h
// LOL英雄榜UITableView加载plist展示单组数据
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 LiuXun. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Hero : NSObject
@property (nonatomic, strong) NSString *icon;
@property (nonatomic, strong) NSString *intro;
@property (nonatomic, strong) NSString *name;
-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)heroWithDict:(NSDictionary *)dict;
@end
编辑Hero.m如下:
//
// Hero.m
// LOL英雄榜UITableView加载plist展示单组数据
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 LiuXun. All rights reserved.
//
#import "Hero.h"
@implementation Hero
-(instancetype)initWithDict:(NSDictionary *)dict
{
if (self = [super init]) {
// self.name = dict[@"name"];
// self.icon = dict[@"icon"];
// self.intro = dict[@"intro"];
[self setValuesForKeysWithDictionary:dict]; // KVC
}
return self;
}
+(instancetype)heroWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
@end
编辑控制器的.h文件如下:
//
// ViewController.h
// LOL英雄榜UITableView加载plist展示单组数据
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 LiuXun. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *array;
@end
编辑控制器的.m文件如下:
//
// ViewController.m
// LOL英雄榜UITableView加载plist展示单组数据
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 LiuXun. All rights reserved.
//
#import "ViewController.h"
#import "Hero.h"
#define WIDTH [UIScreen mainScreen].bounds.size.width
#define HEIGHT [UIScreen mainScreen].bounds.size.height
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 添加UITableView控件
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT) style:UITableViewStylePlain];
self.tableView.dataSource = self;
self.tableView.showsVerticalScrollIndicator = NO; // 取消竖直滑动条
self.tableView.rowHeight = 70; // 只对于所有行高度都相同的情况下
[self.view addSubview:self.tableView];
}
// 重写数组的get方法实现懒加载
-(NSArray *)array
{
if (_array == nil) {
//查找plist文件的路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"heros.plist" ofType:nil];
// 根据路径读取plist文件到一个数组
NSArray *arrayDict = [NSArray arrayWithContentsOfFile:path];
// 新建空的一个专门存放model对象的可变数组
NSMutableArray *arrayModel = [NSMutableArray array];
// 遍历从文件读取存放所有字典的数组,逐个转成model对象存放到可变数组中
for (NSDictionary * dict in arrayDict){
// 新建一个model对象
Hero *hero = [Hero heroWithDict:dict];
[arrayModel addObject:hero];
}
_array = arrayModel;
}
return _array;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// 取消状态栏
-(BOOL)prefersStatusBarHidden
{
return YES;
}
// 利用UITableViewDelegate代理协议中的方法,即使行高不相同的也行
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row %2 == 0) {
return 60;
}else{
return 80;
}
}
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.array.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 新建指定格式的单元格对象
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
// 获取model数据
Hero *hero = self.array[indexPath.row];
cell.imageView.image = [UIImage imageNamed:hero.icon];
cell.textLabel.text = hero.name;
cell.detailTextLabel.text = hero.intro;
// 添加箭头
/* accessoryType 的枚举值如下:
UITableViewCellAccessoryNone, // don't show any accessory view
UITableViewCellAccessoryDisclosureIndicator, // regular chevron. doesn't track
UITableViewCellAccessoryDetailDisclosureButton, // info button w/ chevron. tracks
UITableViewCellAccessoryCheckmark, // checkmark. doesn't track
UITableViewCellAccessoryDetailButton NS_ENUM_AVAILABLE_IOS(7_0) // info button. tracks*/
if(indexPath.row <1){
cell.accessoryType = UITableViewCellAccessoryNone; // 默认状态下不显示任何组件
}else if(indexPath.row<2){
cell.accessoryType = UITableViewCellAccessoryDetailButton ; //显示详细信息按钮
}else if (indexPath.row<3){
cell.accessoryType = UITableViewCellAccessoryCheckmark; // 添加选择按钮
}else if (indexPath.row <4){
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // 添加箭头按钮
}else if (indexPath .row<5){
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; // 同时添加箭头与详细信息的按钮
}else if (indexPath.row <6 ){
cell.accessoryView = [[UISwitch alloc] init];
}else
cell.accessoryView = [[UIButton alloc] init];
return cell;
}
@end
运行结果如下: