1、总结一:storyBoard使用步骤及注意事项(注册单元格)
2、总结二:tableView属性和方法
3、总结三:tableView常用数据源委托方法(dataSource)
4、总结四:tableView常用代理委托方法(delegate)
总结一:使用storyBoard
(注:_
tableView.dataSource = self;
_
tableView.delegate = self; (在storyBoard中连线))
1、不需要NavigationController
在storyBoard中:拖个TableView至viewController,托代理,拖DataSource
2、需要NavigationController
在storyBoard中:
(1)拖NavigationController(删掉自带的RootViewController),is(入口)
(2)连线NavigationController和viewController(Root)
(3)拖个tableView至viewController(还需托代理)
(4)在.m文件中实现代理方法
(4.1)返回单元格方法中(单元格复用)
(4.2)拖table View cell (会有Prototype cells),
此时返回单元格方法中(单元格复用
UITableViewCell
*cell = [tableView
dequeueReusableCellWithIdentifier: forIndexPath:
];)
(4.2.1)(xib)中,选中cell, 设置identifier
(4.2.2)在.m文件中
viewDidLoad方法中,在注册一个单元格(UI07-06)
(
//
注册一个单元格
(
通过类去注册)
---(
不建议
)
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];)
(5)如果从别的ViewController弹出本视图控制器的话,弹出时需用到以下方法:
//
拿到
storyboard
当中创建的控制器对象
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
NewsDetailViewController *detailVC = [storyboard instantiateViewControllerWithIdentifier:@"NewsDetailVC"];
//push进入图片详情界面
[self.navigationController pushViewController:detailVC animated:YES];
总结二:tableView属性和方法
【1】创建
UITableView *tableView = [[UITableView alloc] initWithFrame: style: ];
//
frame设置
方法一:
CGRectMake
(
0
,
20
, [
UIScreen
mainScreen
].
bounds
.
size
.
width
, [
UIScreen
mainScreen
].
bounds
.
size
.
height
-
20
)
//
frame设置
方法二:
self.view.bounds
//
设置
tableView
的内容偏移量
tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
【2】属性(tableView的属性)
《1》分割线
(1)分割线风格---------------------
separatorStyle
(2)
分割线颜色
---------------------
separatorColor,
默认标准灰色
(3)
分割线偏移量-------------------
separatorInset
(
上、左、下、右
)
//
注意:分割线的左侧的偏移量用这个方法不能设置
_tableView
.
separatorInset
=
UIEdgeInsetsMake
(
0
, -
100
,
0
,
10
);
《2》
头视图
------------------------
tableHeaderView
尾视图
------------------------
tableFooterView
//
注意:头视图和尾视图的宽度手动设置无效,他会自动与屏幕齐宽
《3》
单元格的行高
------------------
rowHeight
--
默认
44
如果需要动态地确定行高需要在代理方法中实现
《4》section头视图行高-------------sectionHeaderHeight
section尾视图行高-------------sectionFooterHeight
《5》表示图背景---------------------backgroundView
他有时会影响你的背景设置,此时将其设为nil;
【3】方法(tableView的方法)
《1》刷新数据------------------------- reloadData
《2》根据indexPath,返回cell实例
------------------------------cellForRowAtIndexPath
《3》根据显示的cell,返回cell实例的数组
-------------------------------visibleCells
《4》根据显示的cell,返回NSIndexPath实例的数组
------------------------------indexPathsForVisibleRows
《5》根据组、行的下标,构建其IndexPath
NSIndexPath
*indexpath = [
NSIndexPath
indexPathForRow
:
2
inSection
:
0
];
《6》使数据显示到指定位置,可以配置动画(需先构建IndexPath)
[
self
.tableView scrollToRowAtIndexPath:indexpath atScrollPosition: animated:
YES
];
《7》刷新组数据:
---reloadSections: withRowAnimation:
NSIndexSet
*indexSet = [
NSIndexSet
indexSetWithIndex
:section];
[self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];
//
自适应高度
cell.
textLabel
.
numberOfLines
=
0
;
总结三:tableView常用数据源委托方法(dataSource)<凡与数据相关的>
@required
// 返回多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
// 单元格对象
- (
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath;
@optional
@optional
// 返回多少组(默认为1)
- (
NSInteger
)numberOfSectionsInTableView:(
UITableView
*)tableView;
//组的头视图标题
- (
NSString
*)tableView:(
UITableView
*)tableView titleForHeaderInSection:(
NSInteger
)section;
//
组的尾视图标题
- (
NSString
*)tableView:(
UITableView
*)tableView titleForFooterInSection:(
NSInteger
)section;
总结四:tableView常用代理委托方法(delegate)<
凡与UI相关的
>
@optional
// Variable height support
//单元格行高
- (
CGFloat
)tableView:(
UITableView
*)tableView heightForRowAtIndexPath:(
NSIndexPath
*)indexPath;
//头视图行高
- (
CGFloat
)tableView:(
UITableView
*)tableView heightForHeaderInSection:(
NSInteger
)section;
//尾视图行高
- (
CGFloat
)tableView:(
UITableView
*)tableView heightForFooterInSection:(
NSInteger
)section;
// 自定义头/尾视图
- (
UIView
*)tableView:(
UITableView
*)tableView viewForHeaderInSection:(
NSInteger
)section;
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
// 当单元格被选中时
- (
void
)tableView:(
UITableView
*)tableView didSelectRowAtIndexPath:(
NSIndexPath
*)indexPath;
//当单元格即将出现时调用的方法
- (
void
)tableView:(
UITableView
*)tableView willDisplayCell:(
UITableViewCell
*)cell forRowAtIndexPath:(
NSIndexPath
*)indexPath;
//
当头视图即将出现时调用的方法
- (
void
)tableView:(
UITableView
*)tableView willDisplayHeaderView:(
UIView
*)view forSection:(
NSInteger
)section
NS_AVAILABLE_IOS
(
6
_0);
//
当尾视图即将出现时调用的方法
- (
void
)tableView:(
UITableView
*)tableView willDisplayFooterView:(
UIView
*)view forSection:(
NSInteger
)section
NS_AVAILABLE_IOS
(
6
_0);
//
当单元格即将消失时调用的方法
- (
void
)tableView:(
UITableView
*)tableView didEndDisplayingCell:(
UITableViewCell
*)cell forRowAtIndexPath:(
NSIndexPath
*)indexPath
NS_AVAILABLE_IOS
(
6
_0);
//
当头视图即将消失时调用的方法
- (
void
)tableView:(
UITableView
*)tableView didEndDisplayingHeaderView:(
UIView
*)view forSection:(
NSInteger
)section
NS_AVAILABLE_IOS
(
6
_0);
//
当尾视图即将消失时调用的方法
- (
void
)tableView:(
UITableView
*)tableView didEndDisplayingFooterView:(
UIView
*)view forSection:(
NSInteger
)section
NS_AVAILABLE_IOS
(
6
_0);