视图的切换与管理

在《视图控制器》中通过button简单实现了视图的切换。此文通过UITabBarController和UINavigationController简单介绍,实现视图的切换

(一)UITabBarController简介

UITabBarController功能为应用屏幕下方的功能键,如打电话应用下方的最近通话/通讯录等按钮。又或者为微信下方的通讯录/发现/我等按钮。

(二)新建两个UIViewController

如下图所示,并在相应的viewDidLoad中设置不同的背景颜色以区分

(三)新建一个LLTabBarController,并继承在UITabBarController

在.m文件中添加新的init方法,在初始化中,将(二)中新建的视图赋值给LLTabBarController,如下所示

-(id) init
{
    if(self==[super init])
    {
        TabBarView1Controller *view1=[[TabBarView1Controller alloc] init];
        //设置显示样式
        view1.tabBarItem=[[UITabBarItem alloc]
                          initWithTabBarSystemItem:UITabBarSystemItemMore tag:0];

        TabBarView2Controller *view2=[[TabBarView2Controller alloc] init];
        view2.tabBarItem=[[UITabBarItem alloc]
                          initWithTabBarSystemItem:UITabBarSystemItemContacts tag:0];

        NSArray *views=[[NSArray alloc] init];
        views=[views arrayByAddingObject:view1];
        views=[views arrayByAddingObject:view2];

        [self setViewControllers:views];

    }

    return self;
}

(四)在AppDelegate.m中设置跟视图控制器

UITabBarViewController也继承在UIViewController,可以设置其为根控制器,也可以设置其他的UIViewController为根视图,并把UITabBarViewController,附在根视图上(addSubview)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch

    LLTabBarController *tabBarController=[[LLTabBarController alloc] init];
    self.window.rootViewController=tabBarController;
    tabBarController.selectedIndex=1;
    //UIViewController *selectedController=tabBarController.selectedViewController;
    tabBarController.delegate=self;

    return YES;
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"Did select view controller");
}

至此,可以通过底部按钮进行相应切换了。在项目中,UITabBarController跟UINavigationContorller经常会搭配使用,比如UITabBarController每个tab的rootViewController就是一个UINavigationController

//---------------------------------分割线------------------------------------//

UINavigationController通过出入栈方式实现视图控制以及相关按钮实现

(一)新建LLNavigationController并继承自UINavigationController

(二)新建View1Controller(作为被控制视图)

(三)在AppDelegate.m中添加如下代码,并把LLNavigationController设置为根控制视图

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch

    LLNavigationController *navigationController=[[LLNavigationController alloc] init];
    self.window.rootViewController=navigationController;
    navigationController.delegate=self;

    //定义初始controller
    View1Controller *mainViewController=[[View1Controller alloc] init];
    //设置初始视图
    [navigationController pushViewController:mainViewController animated:YES]; return YES; }

(四)在View1Controller中完成LLNavigationController相关设置

也可以在其他地方设置LLNavigationController参数以及方法,如AppDelegate中。在View1Controller中设置时为了说明通过navigationController变量可以获取到LLNavigationController,并进行视图的切换

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //导航栏设置,如果没有在LLNavigationController中进行入栈(pushViewController)操作,则无效   self.navigationItem.title=@"weichat";   self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addBtnEvent)];   self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editBtnEvent)]; } 

-(void) addBtnEvent {   NSLog(@"Add clicked"); } 

-(void) editBtnEvent {   NSLog(@"Edit clicked");   //可以在主controller中获取到navigationController,bing设置显示其他controller //[self.navigationController pushViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#>] }

至此可实现LLNavigationController简单功能

原文地址:https://www.cnblogs.com/llstart-new0201/p/9690648.html

时间: 2024-10-05 05:04:51

视图的切换与管理的相关文章

003-多视图控制器切换

多视图控制器切换 1.容器的概念 • 一个iOS的app很少只由一个ViewController组成,除非这个app极其简单.当app中有多个ViewController时,就需要对这些ViewController进行管理 • 容器的概念:负责展示一个或者多个ViewController,并管理这些 ViewController的生命周期 • ?部分容器本身也是一个ViewController,被容器管理的控制器称为容器的?控制器(childViewController),?容器被称为父控制器(

Adapter类控件使用之ViewPager(视图滑动切换工具)的基本使用

(一)概述 Android 3.0后引入的一个UI控件--ViewPager(视图滑动切换工具),实在想不到 如何来称呼这个控件,他的大概功能:通过手势滑动可以完成View的切换,一般是用来做APP 的引导页或者实现图片轮播: (二)ViewPager的简单介绍 ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左 右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager 设置切换时的动画效果,当然

在多个游戏视图间切换实现效果

在多个游戏视图间切换实现效果 2.2.3  实现效果 将脚本加到CameraSwitch上,并选中此游戏对象,在Inspector视图里查看脚本组件的属性.设置Cameras和Shortcuts中的Size属性为3,前者依次指定Main Camera.Camera1和Camera2,后者依次指定1.2和3,为Element0~3的属性值.如图2-9所示本文选自Unity游戏开发技巧集锦. 图2-9  指定脚本组件中各属性的值 在Unity里,运行这个游戏,当分别按下键盘上的1.2和3按键时,游戏

Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom

一.视图切换类型介绍在storyboard中,segue有几种不同的类型,在iphone和ipad的开发中,segue的类型是不同的.在iphone中,segue有:push,modal,和custom三种不同的类型,这些类型的区别在与新页面出现的方式.而在ipad中,有push,modal,popover,replace和custom五种不同的类型. modal 模态转换最常用的场景,新的场景完全盖住了旧的那个.用户无法再与上一个场景交互,除非他们先关闭这个场景.是在viewControlle

自定义视图控制器切换(iOS)

在iOS开发过程中,通常我们会使用UINavigationController,UITabbarController等苹果提供的视图控制器来切换我们的视图.在iOS5之前,如果要自定义容器视图控制器很麻烦,比如你要考虑到子视图的生命周期,当设备旋转时的情况等,好在iOS5中苹果提供了添加视图控制器(addChildViewController)等管理视图控制器的API,这样我们就能使用此API来自定义自己的视图控制器了,这篇文章只要介绍如何使用此API实现UITabbarController的基

Storyboard里面的几种Segue区别和视图的切换

几种segue:push.modal.popover.replace.custom. 一.视图切换类型介绍 1.在iPhone和iPad中,segue的类型是不同的. 2.在iPhone中,segue有(3种):push.modal和custom三种不同的类型,这些类型的区别在与新页面出现的方式. 在iPad中,segue有(5种):push.modal.popover.replace.custom类型.(没用过) 3.modal类型(模态转换): a.最常用的场景,新的场景完全盖住了旧的那个.

iOS开发之多表视图滑动切换示例(仿&quot;头条&quot;客户端)

好长时间没为大家带来iOS开发干货的东西了,今天给大家分享一个头条新闻客户端各个类别进行切换的一个示例.在Demo中对所需的组件进行的简单封装,在封装的组件中使用的是纯代码的形式,如果想要在项目中进行使用,稍微进行修改即可. 废话少说,先介绍一下功能点,下图是整个Demo的功能点,最上面左边的TabBarButtonItem是用来减少条目的,比如下图有三个按钮,点击减号会减少一个条目.右边的为增加一个条目.点击相应的按钮是切换到对应的表视图上,下方红色的是滑动的指示器,同时支持手势滑动.运行具体

UInavigationcontroller中栈的概念和模态视图的切换

模态视图切换下一view的方法:[self   presentViewController:<#(UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>]  第一个参数传入要切换的那个view,第二个参数表上是否使用动画,第三个参数是个代码块,一般设置为nil: 模态视图返回上一个view的方法: [self dismissViewControllerAnimated:YES

ios之网络异常与正常视图的切换

1. xib中创建两个View 2. View的视图大概如下第一个:View View 第二个:View 3. 代码切换: [self.view addSubview:_redView];  // 会自己移除调之前存在的view唔需要手动remove