一:UITableView
UITableView表視圖。
表示圖在我們?nèi)粘5膇OS開發(fā)中應用非常廣泛。
description:UITableView繼承與UIScrollView。所以UITableView擁有UIScrollView所有的方法和屬性。UIScrollView的一些屬性和方法我就不介紹了,如果有些不清楚可以查看UIScrollView基本應用。
初始化:
UIScrollView擁有自己的初始化方法
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
第一種是不分組分格UITableViewStylePlain
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

第二種是分組分格UITableViewStyleGrouped
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];

初始化后在self.view addSubView:tableView就可以在當前ViewController上添加表視圖了。用鼠標來回滑動一下可以發(fā)現(xiàn)tableView由一行一行的cell組成。
如果我們想利用tableView來創(chuàng)建我們所需要的一些視圖效果我們就要實現(xiàn)它的兩個代理方法:UITableViewDelegate(控制tableView的顯示的代理),UITableViewDataSource(控制tableView的數(shù)據(jù)顯示的代理)。你就記住UITableViewDelegate中的代理方法可以控制tableView的外形長什么樣,UITableViewDataSource中的代理方法可以控制tableView顯示的一些數(shù)據(jù)。
我們需要在頭文件延展中簽訂協(xié)議。并設置簽訂代理。
tableView.delegate = self;
tableView.dataSource = self;
簽訂完代理后就需要實現(xiàn)tableviewsDataSource必須實現(xiàn)的兩個方法
@protocol UITableViewDataSource<NSObject>
@required
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
@optional
這是UItableViewDataSource的頭文件,第一個方法需要我們返回一個NSInterge類型的數(shù)據(jù)。這里表示我們要返回一個section需要返回多少個Row。
return 10;
第二個方法需要我門返回一個UITableVIewCell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kTableViewCustomCellReuse];
注意:tableView在重用池中取cell之前我門必須先注冊重用池??梢栽赩C的ViewDidLoad的方法中或者在創(chuàng)建tableView的地方注冊。
[self.nameTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kTableViewCellReuse];
運行程序

我們可以給cell添加一些東西
UITableCell系統(tǒng)的cell 擁有imageView,textLabel,detailTextLabel這三個屬性我們可以對cell進行賦一些圖片,標題和副標題
當然我門也可以自定義cell 在我們自定義cell時要將我們自定義的空間添加到contentView上。因為UITableViewCell上會有一個contentView添加在cell上。
在這里補充一下如何自定義cell。
Command + N創(chuàng)建一個文件繼承UITableViewCell。

這里有幾點需要注意的是,當我們自定義cell時我們的初始化方法不再是initWithFrame:而是initWithStyle:reuseIdentifier:
應為在整個cell的生命周期都不會走initWithFrame:這個方法。你可以自己打斷點進行驗證。
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// TableViewCell 默認大小 寬320 高44
// 在初始化時, cell的frame是初始值, 不能為自定義視圖布局
NSLog(@"初始化時,cell的frame是%@", NSStringFromCGRect(self.frame));
}
//添加子view
_customView = [[UIView alloc] initWithFrame:CGRectZero];
_customView.backgroundColor = [UIColor orangeColor];
//contentView顯示內(nèi)容
[self.contentView addSubview:_customView];
//初始化方法中,只負責創(chuàng)建
//3. 創(chuàng)建的子試圖應該添加在哪個父試圖
return self;
}
將自定義的控件加載到cell的contentView上。在初始化的時候不要給自空間的frame配置。我們需要在layoutSubviews的方法里對自控件的frame進行配置。只有在layoutSubviews里配置才能適配多種尺寸的iphone。否則系統(tǒng)默認只適配3.5寸的iPhone。
- (void)layoutSubviews {
//千萬不要忘記 super layoutSubviews
[super layoutSubviews];
NSLog(@"%s時,cell的frame是%@",__FUNCTION__, NSStringFromCGRect(self.frame));
//layoutSubviews中, 負責給視圖布局
//不要使用cell的frame去進行視圖布局
//使用contentView的frame進行布局
_customView.frame = CGRectMake(0, 0, self.contentView.frame.size.width, 100);
}