Snail—UI学习之系统标签栏UITabBarController

背景条件是

有一个根控制器 继承于UITabBarController

然后 建四个UIViewController

再然后创建一个UIViewController 我们让它作为上面四个其中之一的子界面

然后再RootViewController中写入下面代码

#import "WJJRootViewController.h"
#import "WJJFirstViewController.h"
#import "WJJSecondViewController.h"
#import "WJJThirdViewController.h"
#import "WJJForthViewController.h"

@interface WJJRootViewController ()

@end

@implementation WJJRootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

/*
 标签栏是比导航栏更高级的viewController 有标签栏的app首先要看有几个标签 然后创建几个UIViewController 如果UIViewController中又导航栏 则创建导航栏,让UIViewController作为导航栏的rootViewController
 */

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    [self createViewControllers];

}

- (void)createViewControllers{

    //实例化每个UIViewController
    WJJFirstViewController * first = [[WJJFirstViewController alloc] init];
    //为每个viewController添加导航栏
    UINavigationController * firstNav = [[UINavigationController alloc] initWithRootViewController:first];
    //实例化first的item 系统tabBar选中是蓝色 是固定颜色 不可变
    first.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"微信" image: [UIImage imageNamed:@"tab_0.png"] selectedImage:[UIImage imageNamed:@"tab_c0.png"]];

    //其他三个界面同理
    WJJSecondViewController * second = [[WJJSecondViewController alloc] init];
    second.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"通讯录" image: [UIImage imageNamed:@"tab_1.png"] selectedImage:[UIImage imageNamed:@"tab_c1.png"]];
    WJJThirdViewController * third = [[WJJThirdViewController alloc] init];
    third.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"发现" image: [UIImage imageNamed:@"tab_2.png"] selectedImage:[UIImage imageNamed:@"tab_c2.png"]];
    WJJForthViewController * four = [[WJJForthViewController alloc] init];
    four.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"设置" image: [UIImage imageNamed:@"tab_3.png"] selectedImage:[UIImage imageNamed:@"tab_c3.png"]];

    //为每个viewController添加一个导航栏

    UINavigationController * secondNav = [[UINavigationController alloc] initWithRootViewController:second];
    UINavigationController * thirdNav = [[UINavigationController alloc] initWithRootViewController:third];
    UINavigationController * fourNav = [[UINavigationController alloc] initWithRootViewController:four];

    //把创建的四个Nav 放到标签栏的容器里
    self.viewControllers = @[firstNav,secondNav,thirdNav,fourNav];

    //让第一个界面作为初始页面
    self.selectedIndex = 0;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

然后为每个UIViewController初始化一个背景颜色

接下来,让第一个界面可以调到子界面 其他三个类似的做法

进入FirstViewController.m中

#import "WJJFirstViewController.h"
#import "WJJFirstChildViewController.h"

@interface WJJFirstViewController ()

@end

@implementation WJJFirstViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor redColor];
    //导航栏和标签栏 如果同时存在 再调用下面的方法 会使得导航栏标题和标签的item标题都变成下面的字符串
    //self.title = @"我是Snail";
    //所以该使用下面的语句为导航栏添加标题
    self.navigationController.title = @"Snail";
    //模拟在微信两字的右上角 显示有几天未读信息
    self.tabBarItem.badgeValue = @"5";
    [self createButton];
}

//为第一个界面 添加一个子界面 WJJFirstChildViewController.m
- (void)createButton{

    UIButton * rightButton = [UIButton buttonWithType:UIButtonTypeSystem];
    rightButton.frame = CGRectMake(0, 0, 50, 20);
    [rightButton setTitle:@"下一页" forState:UIControlStateNormal];
    [rightButton addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem * rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
    self.navigationItem.rightBarButtonItem = rightBarButtonItem;
}

- (void)nextPage{

    WJJFirstChildViewController * child = [[WJJFirstChildViewController alloc] init];
    [self.navigationController pushViewController:child animated:YES];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

然后进入到FirstViewController的子界面FirstChildViewController.m中

#import "WJJFirstChildViewController.h"

@interface WJJFirstChildViewController ()

@end

@implementation WJJFirstChildViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor cyanColor];
}

//调用周期函数 在进入这个子界面的时候 标签栏隐藏
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = YES;
}

//此页面消失时 标签栏显示
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    self.tabBarController.tabBar.hidden = NO;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

效果图如下:主界面跳转

跳转到子界面中

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-27 05:44:38

Snail—UI学习之系统标签栏UITabBarController的相关文章

Snail—UI学习之自定义标签栏UITabBarController

这里的背景跟上面的差不多 不过这里要用到AppDelegate的单例进行传值 首先到AppDelegate.h文件中 <span style="color:#FF0000;">#import <UIKit/UIKit.h> @interface WJJRootViewController : UITabBarController //声明一UIButton属性 来记录当前按下的按钮 @property (nonatomic,strong) UIButton *

Snail—UI学习之导航视图控制器UINavigationController(系统)

背景 有一个根视图控制器 然后跳转到第一个界面  第一个界面可以返回到根视图 也可以跳转到第二个视图 第二个视图可以直接返回到根视图 新建三个ViewController    RootViewController FirstViewController SecondViewController 首先在AppDelegate.m中写入 #import "WJJAppDelegate.h" #import "WJJRootViewController.h" @impl

Snail—UI学习之表视图TableView多行删除

这次实现的功能是多行cell进行删除 代码是在上一次的基础上进行修改的 有的代码删除重写 有的方法只是加了一些逻辑判断 // // WJJRootViewController.m // blog_UITableView // // Created by Snail on 15-7-30. // Copyright (c) 2015年 Snail. All rights reserved. // #import "WJJRootViewController.h" @interface W

Snail—UI学习之UITextField

简单看一下UITextField的属性 - (void)createTextField{ UITextField * textField = [[UITextField alloc] initWithFrame:CGRectMake(40, 40, 240, 40)]; //设置UITextField的边框风格,否则看不见textField 盲点的话可以点到它 /* UITextBorderStyleRoundedRect 圆角 UITextBorderStyleBezel 上.左有边框 UIT

Snail—UI学习之初识

在AppDelegate.m中有几个默认存在的函数 // // WJJAppDelegate.m // 课上练习 // // Created by Snail on 15-7-20. // Copyright (c) 2015年 Snail. All rights reserved. // #import "WJJAppDelegate.h" @implementation WJJAppDelegate //程序的入口 仅仅同意一次 - (BOOL)application:(UIApp

Snail—UI学习之UITableView之分组显示

之前的demo都是一个分组显示数据的 这次我们用的是带有分组的tableView #import "WJJRootViewController.h" @interface WJJRootViewController (){ UITableView * _tableView; NSMutableArray * _dataArray; } @end @implementation WJJRootViewController - (id)initWithNibName:(NSString *

Snail—UI学习之UITableView之自定义UITableViewCell

之前都是用得系统的UItableViewCell 局限性比较大 不够自由 自定义的cell满足了我们所有的需求 以后做项目的时候也是大部分都是用自定义的 后面我们要把数据放在数据模型里 数据源数组里将要存储的是model BookModel.h #import <Foundation/Foundation.h> @interface WJJBookModel : NSObject @property (nonatomic,copy) NSString * title; @property (n

Snail—UI学习之表视图TableView(一)

我们是整一个表视图 然后再表视图的上方是一个广告栏 首先,在.h文件中写上下面的代码 主要就是遵守一些代理 #import <UIKit/UIKit.h> @interface WJJRootViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate> @end 然后再.m文件中写上如下 #import "WJJRootViewContro

Snail—UI学习之表视图TableView(二)

接着上面的项目 ,当下面标记红色的代码写上后,我们按下右上角的edit按钮 就可以对cell进行插入.删除.移动等操作 #import "WJJRootViewController.h" @interface WJJRootViewController (){ //数据源 存放数据 NSMutableArray * _dataArray; //这就是我们的tableView UITableView * _tableView; //页面控制器 UIPageControl * _pageC