目录:
1、push方法
2、模态视图
3、UITableBar标签栏使用
4、获取要跳转页面的几种方式
1.UINavigationController的push方式
//1.跳转到新的VC
/*
*参数1.要切换的VC
*参数2.是否带动画效果
*/
self.navigationController pushViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#>
//2.返回到上一个VC
self.navigationController popViewControllerAnimated:<#(BOOL)#>
//3.返回到push过的页面(先找到此页再返回)
for (UIViewController *vc in self.navigationController.viewControllers)
{
if([vc isKindOfClass:[FundProMainViewController class]])
{
[self.navigationController popToViewController:vc animated:YES];
}
}
//4.返回到根视图控制器(返回到根视图,少用)
self.navigationController popToRootViewControllerAnimated:<#(BOOL)#>
//5.StoryBoard中连线跳转,可以push、present等方式。
2.模态视图(modal)
显示新页面
self presentViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>
/*
*参数1.要切换的VC
*参数2.是否带动画效果
*参数3.成功后想要做的相应操作(一般为nil)
*/
返回上一个页面(即本页面消失)
self dismissViewControllerAnimated:<#(BOOL)#> completion:<#^(void)completion#>
/*
*参数1.是否带动画效果
*参数2.成功后想要做的相应操作(一般为nil)
*/
模态视图详解:
已经上传到Coding的demo地址:
https://coding.net/u/Panzz/p/ModelViewControllerDemo/git
一、主页面中相关代码
//创建按钮,弹出视图(设置button属性及方法)
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(100, 60, 180, 60);
[button setTitle:@"弹出模态视图" forState:UIControlStateNormal];
[self.view addSubview:button];
//添加button的点击事件
[button addTarget:self action:@selector(tapBtn:) forControlEvents:UIControlEventTouchUpInside];
//弹出模态视图按钮
-(void)tapBtn:(UIButton *)sender{
//获取storyboard
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
//有多个storyboard的时候必须先获取哪个名字的storyboard
//通过storyboard获取VC 一个storyboard的时候用self.storyboard代替
//获取要弹出的视图(storyboard中必须设置StoryboardId为modelVC)
self.modelVC = [sb instantiateViewControllerWithIdentifier:@"modelVC"];
//设置弹出样式
self.modelVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
//模态展示modelVC
[self presentViewController:self.modelVC animated:YES completion:^{
//弹出视图成功后要做的事情(一般为nil)
NSLog(@"弹出modelVC成功");
}];
}
以上就是模态展示部分,下面介绍返回按钮(NavigationBar)
二、模态展示的视图中的相关代码
//定时器,定时关闭模态视图
// NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(close) userInfo:nil repeats:YES];
//创建一个navigationbar
UINavigationBar *navBar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
[self.view addSubview:navBar];
//创建一个item
UINavigationItem *item = [[UINavigationItem alloc]initWithTitle:@"ModelVC"];
navBar.items = @[item];
UIBarButtonItem *button = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(close)];
item.rightBarButtonItem = button;
//定时关闭模态视图
-(void)close{
[self dismissViewControllerAnimated:YES completion:^{
NSLog(@"关闭模态视图成功");
}];
}
注意事项:
通过模态(present方法)展示的视图没有导航栏,需要自己重新添加;
而通过push出来的新视图是继承上一个视图的导航栏,不用自己重新添加。
3.UITableBar标签栏实现页面之间的并列切换(平行切换)
//首先要在AppDelegate.m中设置根视图控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
//初始化标签栏要存放的视图控制器
FirstViewController *firstVC = [[FirstViewController alloc]init];
SecondViewController *secondVC = [[SecondViewController alloc]init];
ThirdViewController *thirdVC = [[ThirdViewController alloc]init];
//创建标签栏控制器
UITabBarController *tabbarControl = [UITabBarController new];
//将各标签对应的视图控制器放入标签栏中
tabbarControl.viewControllers = @[firstVC,secondVC,thirdVC];
//指定标签栏默认选中的标签
tabbarControl.selectedIndex = 0;
//将标签栏作为应用的跟视图控制器
self.window.rootViewController = tabbarControl;
return YES;
}
4、获取要跳转页面的几种方式
1)手写代码方式
#import "FirstVC.h"
- (void)goNextPageFirst
{
FirstVC *vc = [[FirstVC alloc] init];
[self.navigationController pushViewController:vc animated:YES];
}
//push过来默认带导航栏、屏幕背景默认黑色。
2)Xib方式
#import "XibViewController.h"
- (void)goNextPageFromXib
{
XibViewController *vc = [[XibViewController alloc]initWithNibName:@"XibViewController" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
}
注意:此方式跳转失败多数原因是目标VC名称有误,另外,更改了类名后,需要更改相对应的字符串。
3)StoryBoard方式
- (void)goNextPageFromStoryBoard
{
//如果有多个StoryBoard,使用此方法获取当前的
// UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//如果只有一个,直接使用即可
DetailVC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailVC"];
[self.navigationController pushViewController:vc animated:YES];
}
注意:默认storyboard是没有导航栏的,需要在根视图添加导航栏,具体方法如下图: