我这里说的联动的意思就是操作AtableView 让BtableView滚动到相应的位置,操作BtableView让AtableView滚动到相应的位置.
先给个参考图看一下好说.
首先介绍一下这个结构.
首先左边的tableView是一个控制 leftViewController
右边的是一个控制器rightViewController
右边控制器rightViewController的rightTableView加到了左边 控制器的View上了(用到了addChildViewController)
在左边的控制器创建右边控制器 这就拿到了 右边控制器的 引用 在右边控制器中写个 方法 点击左边 用右边的 引用直接调用 方法移动 就好了
移动右边 让左边移动,在右控制器边同样的拿到左边的 引用吧 ,用代理…..
还是看代码吧
ViewController不重要只是加一个导航
ViewController.h
|
1
2
3
|
#import
@
interface
ViewController
:
UIViewController
@
end
|
ViewController.m
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#import "ViewController.h"
#import "leftViewController.h"
@interface
ViewController
(
)
@end
@implementation
ViewController
-
(
void
)
viewDidLoad
{
[
super
viewDidLoad
]
;
// Do any additional setup after loading the view, typically from a nib.
self
.
view
.
backgroundColor
=
[
UIColor
whiteColor
]
;
UIButton
*bution
=
[
[
UIButton
alloc
]
initWithFrame
:CGRectMake
(
0
,
0
,
100
,
50
)
]
;
bution
.
center
=
self
.
view
.
center
;
bution
.
backgroundColor
=
[
UIColor
redColor
]
;
[
bution
addTarget
:self
action
:
@selector
(
butionCleck
:
)
forControlEvents
:UIControlEventTouchUpInside
]
;
[
self
.
view
addSubview
:bution
]
;
}
-
(
void
)
butionCleck
:
(
UIButton
*
)
sender
{
leftViewController
*leftVC
=
[
leftViewController
new
]
;
[
self
.
navigationController
pushViewController
:leftVC
animated
:YES
]
;
}
-
(
void
)
didReceiveMemoryWarning
{
[
super
didReceiveMemoryWarning
]
;
// Dispose of any resources that can be recreated.
}
@end
|
leftViewController.h
|
1
2
3
|
#import
@interface
leftViewController
: UIViewController
@end
|
leftViewController.m
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#import "leftViewController.h"
#import "rightViewController.h"
@interface
leftViewController
(
)
@property
(
nonatomic
,
strong
)
UITableView
*leftTableView
;
@property
(
nonatomic
,
strong
)
NSArray
*leftDataArr
;
@property
(
nonatomic
,
strong
)
rightViewController
*rightVC
;
@end
@implementation
leftViewController
-
(
void
)
viewDidLoad
{
[
super
viewDidLoad
]
;
// Do any additional setup after loading the view.
self
.
view
.
backgroundColor
=
[
UIColor
whiteColor
]
;
[
self
.
view
addSubview
:self
.
leftTableView
]
;
[
self
creatRightVC
]
;
}
-
(
void
)
creatRightVC
{
self
.
rightVC
=
[
rightViewController
new
]
;
self
.
rightVC
.
delegate
=
self
;
[
self
addChildViewController
:
_rightVC
]
;
[
self
.
view
addSubview
:
_rightVC
.
view
]
;
}
-
(
UITableView
*
)
leftTableView
{
if
(
!
_leftTableView
)
{
_leftTableView
=
[
[
UITableView
alloc
]
initWithFrame
:CGRectMake
(
0
,
0
,
120
,
self
.
view
.
frame
.
size
.
height
)
style
:UITableViewStylePlain
]
;
_leftTableView
.
showsVerticalScrollIndicator
=
NO
;
_leftTableView
.
delegate
=
self
;
_leftTableView
.
dataSource
=
self
;
[
_leftTableView
registerClass
:
[
UITableViewCell
class
]
forCellReuseIdentifier
:
@"cell11"
]
;
}
return
_leftTableView
;
}
-
(
NSArray
*
)
leftDataArr
{
if
(
!
_leftDataArr
)
{
_leftDataArr
=
@
[
@"第一类"
,
@"第二类"
,
@"第三类"
,
@"第四类"
,
@"第五类"
,
@"第六类"
,
@"第七类"
,
@"第八类"
,
@"第九类"
,
@"第十类"
,
@"第十一类"
,
@"第十二类"
,
@"第十三类"
,
@"第十四类"
,
@"第十五类"
,
@"第十六类"
,
@"第十七类"
,
@"第十八类"
,
@"第十九类"
,
@"第二十类"
,
@"第二十一类"
]
;
}
return
_leftDataArr
;
}
-
(
NSInteger
)
numberOfSectionsInTableView
:
(
UITableView
*
)
tableView
{
return
1
;
}
-
(
NSInteger
)
tableView
:
(
UITableView
*
)
tableView
numberOfRowsInSection
:
(
NSInteger
)
section
{
return
self
.
leftDataArr
.
count
;
}
-
(
UITableViewCell
*
)
tableView
:
(
UITableView
*
)
tableView
cellForRowAtIndexPath
:
(
NSIndexPath
*
)
indexPath
{
UITableViewCell
*cell
=
[
tableView
dequeueReusableCellWithIdentifier
:
@"cell11"
forIndexPath
:indexPath
]
;
cell
.
textLabel
.
text
=
self
.
leftDataArr
[
indexPath
.
row
]
;
return
cell
;
}
-
(
void
)
tableView
:
(
UITableView
*
)
tableView
didSelectRowAtIndexPath
:
(
NSIndexPath
*
)
indexPath
{
NSLog
(
@"-----%ld"
,
indexPath
.
row
)
;
if
(
self
.
rightVC
)
{
[
self
.
rightVC
scrollToSelectIndexPath
:indexPath
]
;
}
}
/*
代理右边选择时执行代理.
*/
-
(
void
)
rightViewControllerDelegate
:
(
rightViewController
*
)
vc
withIndexPatch
:
(
NSIndexPath
*
)
ptch
{
[
self
.
leftTableView
selectRowAtIndexPath
:
[
NSIndexPath
indexPathForRow
:ptch
.
section
inSection
:
0
]
animated
:YES
scrollPosition
:UITableViewScrollPositionMiddle
]
;
}
-
(
void
)
rightViewControllerDelegateHeaderViewAppear
:
(
rightViewController
*
)
vc
withIndexPatch
:
(
NSInteger
)
section
{
[
self
.
leftTableView
selectRowAtIndexPath
:
[
NSIndexPath
indexPathForRow
:section
inSection
:
0
]
animated
:YES
scrollPosition
:UITableViewScrollPositionMiddle
]
;
}
-
(
void
)
rightViewControllerDelegateHeaderViewdisappear
:
(
rightViewController
*
)
vc
withIndexPatch
:
(
NSInteger
)
section
{
[
self
.
leftTableView
selectRowAtIndexPath
:
[
NSIndexPath
indexPathForRow
:section
inSection
:
0
]
animated
:YES
scrollPosition
:UITableViewScrollPositionMiddle
]
;
}
-
(
void
)
didReceiveMemoryWarning
{
[
super
didReceiveMemoryWarning
]
;
// Dispose of any resources that can be recreated.
}
@end
|
rightViewController.h
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#import
@class
rightViewController
;
@protocol
rightViewControllerDeldgate
-
(
void
)
rightViewControllerDelegate
:
(
rightViewController
*
)
vc
withIndexPatch
:
(
NSIndexPath
*
)
ptch
;
-
(
void
)
rightViewControllerDelegateHeaderViewAppear
:
(
rightViewController
*
)
vc
withIndexPatch
:
(
NSInteger
)
section
;
-
(
void
)
rightViewControllerDelegateHeaderViewdisappear
:
(
rightViewController
*
)
vc
withIndexPatch
:
(
NSInteger
)
section
;
@end
@interface
rightViewController
: UIViewController
@property
(
nonatomic
,
weak
)
id
delegate
;
-
(
void
)
scrollToSelectIndexPath
:
(
NSIndexPath
*
)
path
;
@end
|
rightViewController.m
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#import "rightViewController.h"
@interface
rightViewController
(
)
@property
(
nonatomic
,
strong
)
UITableView
*rightTableView
;
@property
(
nonatomic
,
strong
)
NSArray
*rightDataArr
;
@property
(
nonatomic
,
assign
)
BOOL
isScrollUp
;
@property
(
nonatomic
,
assign
)
CGFloat
lastOffsetY
;
//滚动即将结束时scrollView的偏移量
@property
(
nonatomic
,
assign
)
BOOL
ifScroll
;
//当左边cell点击-> 右边滑动-> 右边滑动头消失头出现就会执行代理->代理方法再让左边滑动 给个boll值设置为NO就是为了 点击左边cell右边头出现或者消失 都不执行代理方法 左边也不会滑动.
@end
@implementation
rightViewController
-
(
UITableView
*
)
rightTableView
{
if
(
!
_rightTableView
)
{
_rightTableView
=
[
[
UITableView
alloc
]
initWithFrame
:CGRectMake
(
0
,
0
,
self
.
view
.
frame
.
size
.
width
,
self
.
view
.
frame
.
size
.
height
)
style
:UITableViewStylePlain
]
;
_rightTableView
.
showsVerticalScrollIndicator
=
NO
;
_rightTableView
.
delegate
=
self
;
_rightTableView
.
dataSource
=
self
;
[
_rightTableView
registerClass
:
[
UITableViewCell
class
]
forCellReuseIdentifier
:
@"cell"
]
;
[
_rightTableView
registerClass
:
[
UITableViewHeaderFooterView
class
]
forHeaderFooterViewReuseIdentifier
:
@"headerView"
]
;
}
return
_rightTableView
;
}
-
(
NSArray
*
)
rightDataArr
{
if
(
!
_rightDataArr
)
{
_rightDataArr
=
@
[
@
[
@"1橘子"
,
@"西瓜"
,
@"哈密瓜"
,
@"苹 果"
,
@"柚子"
,
@"香蕉"
]
,
@
[
@"2华为手机"
,
@"苹果5"
,
@"苹果5s"
,
@"苹果6"
,
@"苹果6+"
,
@"苹果6s"
,
@"苹果6s+"
]
,
@
[
@"3联想电脑"
,
@"华硕电脑"
,
@"MAC"
]
,
@
[
@"4鸡肉"
,
@"鸭肉"
,
@"牛肉"
,
@"猪肉"
,
@"羊肉"
]
,
@
[
@"5香菇"
,
@"蘑菇"
,
@"大头菜"
,
@"青椒"
]
,
@
[
@"6花生油"
,
@"大豆油"
,
@"葵花籽油"
,
@"芝 麻香油"
]
,
@
[
@"7花椒"
,
@"陈皮"
,
@"八角"
]
,
@
[
@"8橘子"
,
@"西瓜"
,
@"哈密瓜"
,
@"苹果"
,
@"柚子"
,
@"香蕉"
]
,
@
[
@"9华为手机"
,
@"苹果5"
,
@"苹果5s"
,
@"苹果6"
,
@"苹果6+"
,
@"苹果6s"
,
@"苹果6s+"
]
,
@
[
@"10联想电脑"
,
@"华硕电脑"
,
@"MAC"
]
,
@
[
@"11鸡肉"
,
@"鸭肉"
,
@"牛肉"
,
@"猪肉"
,
@"羊肉"
]
,
@
[
@"12香菇"
,
@"蘑菇"
,
@"大头菜"
,
@"青椒"
]
,
@
[
@"13花生油"
,
@"大豆油"
,
@"葵花籽油"
,
@"芝麻香油"
]
,
@
[
@"14花椒"
,
@"陈皮"
,
@"八角"
]
,
@
[
@"15橘子"
,
@"西瓜"
,
@"哈密瓜"
,
@"苹果"
,
@"柚子"
,
@"香蕉"
]
,
@
[
@"16华为手机"
,
@"苹果5"
,
@"苹果5s"
,
@"苹果6"
,
@"苹果6+"
,
@"苹果6s"
,
@"苹果6s+"
]
,
@
[
@"17联想电脑"
,
@"华硕电脑"
,
@"MAC"
]
,
@
[
@"18鸡肉"
,
@"鸭肉"
,
@"牛肉"
,
@"猪肉"
,
@"羊肉"
]
,
@
[
@"19香菇"
,
@"蘑菇"
,
@"大头菜"
,
@"青椒"
]
,
@
[
@"20花生油"
,
@"大豆油"
,
@"葵花籽油"
,
@"芝麻香油"
]
,
@
[
@"21花椒"
,
@"陈皮"
,
@"八角"
]
]
;
}
return
_rightDataArr
;
}
-
(
NSInteger
)
numberOfSectionsInTableView
:
(
UITableView
*
)
tableView
{
return
self
.
rightDataArr
.
count
;
}
-
(
NSInteger
)
tableView
:
(
UITableView
*
)
tableView
numberOfRowsInSection
:
(
NSInteger
)
section
{
NSArray
*arr
=
self
.
rightDataArr
[
section
]
;
return
arr
.
count
;
}
-
(
UITableViewCell
*
)
tableView
:
(
UITableView
*
)
tableView
cellForRowAtIndexPath
:
(
NSIndexPath
*
)
indexPath
{
UITableViewCell
*cell
=
[
tableView
dequeueReusableCellWithIdentifier
:
@"cell"
forIndexPath
:indexPath
]
;
NSArray
*
data
=
self
.
rightDataArr
[
indexPath
.
section
]
;
cell
.
textLabel
.
text
=
data
[
indexPath
.
row
]
;
return
cell
;
}
-
(
nullable
UIView
*
)
tableView
:
(
UITableView
*
)
tableView
viewForHeaderInSection
:
(
NSInteger
)
section
{
UITableViewHeaderFooterView
*headerView
=
[
tableView
dequeueReusableHeaderFooterViewWithIdentifier
:
@"headerView"
]
;
headerView
.
textLabel
.
text
=
[
NSString
stringWithFormat
:
@"第%ld区"
,
section
+
1
]
;
return
headerView
;
}
-
(
CGFloat
)
tableView
:
(
UITableView
*
)
tableView
heightForHeaderInSection
:
(
NSInteger
)
section
{
return
30
;
}
-
(
void
)
viewDidLoad
{
[
super
viewDidLoad
]
;
self
.
view
.
frame
=
CGRectMake
(
120
,
64
,
self
.
view
.
frame
.
size
.
width
-
120
,
self
.
view
.
frame
.
size
.
height
-
64
)
;
self
.
view
.
backgroundColor
=
[
UIColor
redColor
]
;
[
self
.
view
addSubview
:self
.
rightTableView
]
;
}
-
(
void
)
tableView
:
(
UITableView
*
)
tableView
didSelectRowAtIndexPath
:
(
NSIndexPath
*
)
indexPath
{
if
(
_delegate
&&
[
_delegate
respondsToSelector
:
@selector
(
rightViewControllerDelegate
:withIndexPatch
:
)
]
)
{
[
_delegate
rightViewControllerDelegate
:self
withIndexPatch
:indexPath
]
;
}
}
//头将出现
-
(
void
)
tableView
:
(
UITableView
*
)
tableView
willDisplayHeaderView
:
(
UIView
*
)
view
forSection
:
(
NSInteger
)
section
{
if
(
_delegate
&&
[
self
.
delegate
respondsToSelector
:
@selector
(
rightViewControllerDelegateHeaderViewAppear
:withIndexPatch
:
)
]
&&
!
_isScrollUp
&&
_ifScroll
)
{
[
_delegate
rightViewControllerDelegateHeaderViewAppear
:self
withIndexPatch
:section
]
;
}
}
//头讲消失
-
(
void
)
tableView
:
(
UITableView
*
)
tableView
didEndDisplayingHeaderView
:
(
UIView
*
)
view
forSection
:
(
NSInteger
)
section
{
if
(
_delegate
&&
[
self
.
delegate
respondsToSelector
:
@selector
(
rightViewControllerDelegateHeaderViewdisappear
:withIndexPatch
:
)
]
&&
_isScrollUp
&&
_ifScroll
)
{
//上滑才执行
[
_delegate
rightViewControllerDelegateHeaderViewdisappear
:self
withIndexPatch
:section
+
1
]
;
}
}
//主要判断向上滑动还是向下滑动
-
(
void
)
scrollViewDidScroll
:
(
UIScrollView
*
)
scrollView
{
_isScrollUp
=
_lastOffsetY
|
这篇是我看例子http://www.jianshu.com/p/c118a29887ca
由于有点小问题就是 (慢慢拖着拖着不放)滑动右边 左边的联动有时不会出现
首先考虑一个问题
当我们 操作左边tableView的时候 让右边动.
我们动右边的时候 让左边动.
比如说 我操作左边 右边动了 (右边一动左边是不是受到影响呢?)
分析一下我们 想要的结果是
我操作左边 让右边东(这个时候不想让左边受影响)
我拖动右边时才让左边受影响.
那么我们只需 判断出 右边的动 是我操作左边他才动的 还是我直接拖动右边才动的.
所有的解释都在 代码注释里.
效果图如图



4916

被折叠的 条评论
为什么被折叠?



