UITableView是工程开发中最经常使用到的UI控件,但是你真的了解它嘛,这里记录几点有用的但你可能并不知道的。
1
|
self
.
tableView
.
tableFooterView
=
[
[
UIView
alloc
]
init
]
;
|
1
|
self
.
tableView
.
separatorInset
=
UIEdgeInsetsZero
;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/**
* 分割线顶头
*/
-
(
void
)
viewDidLayoutSubviews
{
if
(
[
self
.
tableView
respondsToSelector
:
@
selector
(
setSeparatorInset
:
)
]
)
{
[
self
.
tableView
setSeparatorInset
:
UIEdgeInsetsMake
(
0
,
0
,
0
,
0
)
]
;
}
if
(
[
self
.
tableView
respondsToSelector
:
@
selector
(
setLayoutMargins
:
)
]
)
{
[
self
.
tableView
setLayoutMargins
:
UIEdgeInsetsMake
(
0
,
0
,
0
,
0
)
]
;
}
}
-
(
void
)
tableView
:
(
UITableView *
)
tableView
willDisplayCell
:
(
UITableViewCell *
)
cell
forRowAtIndexPath
:
(
NSIndexPath *
)
indexPath
{
if
(
[
cell
respondsToSelector
:
@
selector
(
setSeparatorInset
:
)
]
)
{
[
cell
setSeparatorInset
:
UIEdgeInsetsZero
]
;
}
if
(
[
cell
respondsToSelector
:
@
selector
(
setLayoutMargins
:
)
]
)
{
[
cell
setLayoutMargins
:
UIEdgeInsetsZero
]
;
}
}
|
1
2
|
self
.
tableView
.
estimatedRowHeight
=
68.0
;
self
.
tableView
.
rowHeight
=
UITableViewAutomaticDimension
;
|
1
2
3
4
5
6
7
|
-
(
void
)
tableView
:
(
UITableView *
)
tableView
didSelectRowAtIndexPath
:
(
NSIndexPath *
)
indexPath
{
[
tableView
deselectRowAtIndexPath
:
indexPath
animated
:
true
]
;
[
tableView
beginUpdates
]
;
ROW
--
;
//此操作表示减少数据源的个数。
[
tableView
deleteRowsAtIndexPaths
:
@
[
indexPath
]
withRowAnimation
:
UITableViewRowAnimationRight
]
;
[
tableView
endUpdates
]
;
}
|
1
2
|
[
tableView
beginUpdates
]
;
[
tableView
endUpdates
]
;
|
其实我的代码很少,核心代码只有以下几行:
1
2
3
4
5
6
7
8
9
10
11
12
|
-
(
void
)
tableView
:
(
UITableView *
)
tableView
didSelectRowAtIndexPath
:
(
NSIndexPath *
)
indexPath
{
[
tableView
deselectRowAtIndexPath
:
indexPath
animated
:
true
]
;
UITableViewCell *
cell
=
[
tableView
cellForRowAtIndexPath
:
indexPath
]
;
UILabel *
label
=
[
cell
.
contentView
viewWithTag
:
1000
]
;
[
tableView
beginUpdates
]
;
if
(
label
.
numberOfLines
==
0
)
{
label
.
numberOfLines
=
1
;
}
else
{
label
.
numberOfLines
=
0
;
}
[
tableView
endUpdates
]
;
}
|
我用SB创建了一个UITableView,然后在cell上放置了一个label,初始化label 的numberOfLines然后在界面上设置tableView
1
2
|
self
.
tableView
.
estimatedRowHeight
=
68.0
;
self
.
tableView
.
rowHeight
=
UITableViewAutomaticDimension
;
|
然后在他的点击动作中改变label的numberOfLines,同时结合使用:
1
2
|
[
tableView
beginUpdates
]
;
[
tableView
endUpdates
]
;
|
像上面po出来的代码那样,这个时候你如果使用[tableView reloadData]也能够达到改变cell高度的效果,但是界面上就不会有使用[tableView beginUpdates]那么流畅,以此类推,其实在很多地方都可以用[tableView beginUpdates]来代替[tableView reloadData]来达到更好的效果.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
-
(
void
)
tableView
:
(
UITableView *
)
tableView
willDisplayCell
:
(
UITableViewCell *
)
cell
forRowAtIndexPath
:
(
NSIndexPath *
)
indexPath
{
CGFloat
offSet
=
tableView
.
contentOffset
.
y
;
if
(
offSet
<=
0
)
{
return
;
}
CGRect
oldRect
=
cell
.
frame
;
CGRect
newRect
=
cell
.
frame
;
newRect
.
origin
.
x
+=
50
;
cell
.
frame
=
newRect
;
[
UIView
animateWithDuration
:
0.5
animations
:
^
{
cell
.
frame
=
oldRect
;
}
]
;
}
|
1
2
3
4
5
6
7
8
|
-
(
void
)
scrollViewDidScroll
:
(
UIScrollView *
)
scrollView
{
for
(
UITableViewCell *
cell
in
_tableView
.
visibleCells
)
{
/**
* 你可以在这里对当前的cell进行一些操作
*
*/
}
}
|