先编译几个子视图控制器
//*
子视图控制器
*/
@property
(
nonatomic
,
strong
)
tableVC
*firstVC;
@property
(
nonatomic
,
strong
)
ViewController1
*secondVC;
@property
(
nonatomic
,
strong
)
ViewController2
*thirdVC;
@property
(
nonatomic
,
strong
)
ViewController4
*fourVC;
//*
当前视图控制器
*/
@property
(
nonatomic
,
strong
)
UIViewController
*currentVC;
@property
(
nonatomic
,
strong
)
UIScrollView
*headScrollView;
@property
(
nonatomic
,
strong
)
NSMutableArray
*itemArray;
@property
(
nonatomic
,
strong
)
UIView
*contentVie
第一步:头部列表视图的创建
_itemArray
= [
NSMutableArray
arrayWithObjects
:
@”
头条
”
,
@”
今日
”
,
@”
焦点
”
,
@”
呵呵
”
,
nil
];
_headScrollView
= [[
UIScrollView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
20
, [
UIScreen
mainScreen
].
bounds
.
size
.
width
,
44
)];
_headScrollView
.
backgroundColor
= [
UIColor
colorWithWhite
:
0.902
alpha
:
1.000
];
for
(
int
i =
0
; i<
_itemArray
.
count
; i++) {
UIButton
*itemButton = [[
UIButton
alloc
]
initWithFrame
:
CGRectMake
(i*([
UIScreen
mainScreen
].
bounds
.
size
.
width
/
_itemArray
.
count
),
0
, [
UIScreen
mainScreen
].
bounds
.
size
.
width
/
_itemArray
.
count
,
44
)];
itemButton.
tag
=
100
+i;
itemButton.
backgroundColor
= [
UIColor
clearColor
];
NSDictionary
*dic =
@{
NSForegroundColorAttributeName
:[
UIColor
purpleColor
],
NSFontAttributeName
:[
UIFont
systemFontOfSize
:
14.0f
]
}
;
[itemButton
setAttributedTitle
:[[
NSAttributedString
alloc
]
initWithString
:
_itemArray
[i]
attributes
:dic]
forState
:
UIControlStateNormal
];
[itemButton
addTarget
:
self
action
:
@selector
(buttonClick:)
forControlEvents
:
UIControlEventTouchUpInside
];
[
_headScrollView
addSubview
:itemButton];
}
[
_headScrollView
setContentSize
:
CGSizeMake
([
UIScreen
mainScreen
].
bounds
.
size
.
width
,
44
)];
_headScrollView
.
showsHorizontalScrollIndicator
=
NO
;
_headScrollView
.
showsVerticalScrollIndicator
=
NO
;
[
self
.
view
addSubview
:
_headScrollView
];
第二步:设置视图展示子视图VC的frame
_contentView
= [[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
64
, [
UIScreen
mainScreen
].
bounds
.
size
.
width
, [
UIScreen
mainScreen
].
bounds
.
size
.
height
–
64
)];
_contentView
.
backgroundColor
= [
UIColor
clearColor
];
[
self
.
view
addSubview
:
_contentView
];
第三步:添加子视图控制器
{
_firstVC
= [[
tableVC
alloc
]
init
];
[
self
addChildViewController
:
_firstVC
];
_secondVC
= [[
ViewController1
alloc
]
init
];
[
self
addChildViewController
:
_secondVC
];
_thirdVC
= [[
ViewController2
alloc
]
init
];
[
self
addChildViewController
:
_thirdVC
];
_fourVC
= [[
ViewController4
alloc
]
initWithNibName
:
@”ViewController4″
bundle
:
nil
];
[
self
addChildViewController
:
_fourVC
];
//
默认展示的是第一个子视图控制器
*/
//
调整子视图控制器的
Frame
已适应容器
View
[
self
fitFrameForChildViewController
:
_firstVC
];
//
设置默认显示在容器
View
的内容
[
self
.
contentView
addSubview
:
_firstVC
.
view
];
_currentVC
=
_firstVC
;
}
//
点击事件
– (
void
)buttonClick:(
UIButton
*)sender{
if
((sender.
tag
==
100
&&
_currentVC
==
_firstVC
) || (sender.
tag
==
101
&&
_currentVC
==
_secondVC
) || (sender.
tag
==
102
&&
_currentVC
==
_thirdVC
) || (sender.
tag
==
103
&&
_currentVC
==
_fourVC
)) {
return
;
}
switch
(sender.
tag
) {
case
100
:{
[
self
fitFrameForChildViewController
:
_firstVC
];
[
self
transitionFromOldViewController
:
_currentVC
toNewViewController
:
_firstVC
];
}
break
;
case
101
:{
[
self
fitFrameForChildViewController
:
_secondVC
];
[
self
transitionFromOldViewController
:
_currentVC
toNewViewController
:
_secondVC
];
}
break
;
case
102
:{
[
self
fitFrameForChildViewController
:
_thirdVC
];
[
self
transitionFromOldViewController
:
_currentVC
toNewViewController
:
_thirdVC
];
}
case
103
:{
[
self
fitFrameForChildViewController
:
_fourVC
];
[
self
transitionFromOldViewController
:
_currentVC
toNewViewController
:
_fourVC
];
}
break
;
}
}
– (
void
)fitFrameForChildViewController:(
UIViewController
*)chileViewController{
CGRect
frame =
self
.
contentView
.
frame
;
frame.
origin
.
y
=
0
;
chileViewController.
view
.
frame
= frame;
}
//
转换子视图控制器
– (
void
)transitionFromOldViewController:(
UIViewController
*)oldViewController toNewViewController:(
UIViewController
*)newViewController{
[
self
transitionFromViewController
:oldViewController
toViewController
:newViewController
duration
:
0.3
options
:
UIViewAnimationOptionTransitionCrossDissolve
animations
:
nil
completion
:^(
BOOL
finished) {
if
(finished) {
[newViewController
didMoveToParentViewController
:
self
];
_currentVC
= newViewController;
}
else
{
_currentVC
= oldViewController;
}
}];
}
//
移除所有子视图控制器
– (
void
)removeAllChildViewControllers{
for
(
UIViewController
*vc
in
self
.
childViewControllers
) {
[vc
willMoveToParentViewController
:
nil
];
[vc
removeFromParentViewController
];
}
}