• 视图的切换与管理


    在《视图控制器》中通过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简单功能

  • 相关阅读:
    Undefined symbols for architecture armv7: "CreateRSADataVerifier(NSString*)", referenced from:
    iOS 多线程研究11
    iOS 多线程研究
    iOS 中谓词的使用 NSPredicate
    ios 进程间通信
    GCD Block最简单的用法
    tabbar 获得对应的视图对象的方法
    网络请求
    iOS手势 规避同一界面上不同子界面同时响应多个手势
    20171107 几天考试总结
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/9690648.html
Copyright © 2020-2023  润新知