iOS——UI——分栏控制器

UITabBarController

首先什么是一个分栏控制器,在许多常用的app里,分栏控制器都是一个必不可少的控件,我们来看看它的样子。
请添加图片描述
这是QQ里的分栏控制器,我们可以通过不同的需求来确定不同视图的个数,通过分栏控制器来进行切换。

在UI中,分栏控制器用UITabBarController来创建,我们来拆分这个单词,UI就不说了,Tab的意思是选项卡,Bar有横梁的意思,Controller是控制器的意思。

然后我们来看它的代码实现:
对于新版的Xcode 我们不需要自己创建一个window,系统已经创建好了window,之前是在 AppDelegate.m文件里创建一个window并且创建一个根视图控制器,但现在SceneDelagate.m的文件里直接创建根视图控制器即可。

  • 在创建视图控制器之前,我们先来创建他们的视图,我们创建三个视图,以UIViewController作为父类:
    在这里插入图片描述
    VCFirst * vcFirst = [[VCFirst alloc] init];
    
    vcFirst.view.backgroundColor = [UIColor blueColor];
    
    VCSecond * vcSecond = [[VCSecond alloc] init];
    
    vcSecond.view.backgroundColor = [UIColor yellowColor];
    
    VCThird * vcThird = [[VCThird alloc] init];
    
    vcThird.view.backgroundColor = [UIColor orangeColor];

将他们的背景颜色改成不同的颜色便于区分。
它们的标题:

    vcFirst.title = @"视图1";
    
    vcSecond.title = @"视图2";
    
    vcThird.title = @"视图3";

接下来是分栏控制器的创建:

    UITabBarController * tbController = [[UITabBarController alloc] init];
    //创建一个控制器数组对象
    
    //将所有要被分栏控制器管理的对象添加到数组里
    NSArray * arrayVC = [NSArray arrayWithObjects:vcFirst, vcSecond, vcThird, nil];

在创建好分栏控制器以后,同时创建一个数组将分栏控制器要控制的视图存储起来。

将分栏视图控制器管理数组赋值,并改变分栏控制器的背景颜色。

    //将分栏视图控制器管理数组赋值
    tbController.viewControllers = arrayVC;
    
    tbController.view.backgroundColor = [UIColor whiteColor];
    //将分栏控制器作为根视图控制器
    self.window.rootViewController = tbController;

通过数组有索引值这一特性来控制它,我们控制启动程序即显示索引值为2的视图,然后判断如果这个视图和索引值为2的视图相等,即打印当前显示3。

    //设置选中的视图控制器索引
    //通过索引来确定哪一个控制器
    tbController.selectedIndex = 2;
    
    if (tbController.selectedViewController == vcThird) {
        NSLog(@"当前显示3");
    }
    //是否透明
    tbController.tabBar.translucent = NO;

打印结果:
在这里插入图片描述
当虚拟机启动时,默认启动至视图3:
在这里插入图片描述

在启动之后,我们发现第一个视图的显示和标题和我们初始化的不一样,这是如何做到的呢?
这时候就要用到分栏按钮对象这个东西,用UITabBarItem来创建:
我们来创建并初始化它:

    UITabBarItem * tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts tag:101];

对于UITabBarSystemItemContacts这个参数,就是用来确定按钮的风格。请添加图片描述

我们可以看到系统设定的按钮风格多种多样,不同的按钮也会有不同的效果,我们来看看不同按钮的区别。
在这里插入图片描述
在这里插入图片描述

    //按钮右上角的提示信息
    //通常用来提示未读的信息
    tabBarItem.badgeValue = @"22";
    
    self.tabBarItem = tabBarItem;

视图按钮上的消息提醒也可以通过类固有的属性来显示出来,最后将视图显示上去即可。

UITabBarController高级

首先第一步操作和之前一样,这次创建6个视图:

    VCFirst * vc01 = [[VCFirst alloc] init];
    
    VCSecond * vc02 = [[VCSecond alloc] init];
    
    VCThird * vc03 = [[VCThird alloc] init];
    
    VCFour * vc04 = [[VCFour alloc] init];
    
    VCFive * vc05 = [[VCFive alloc] init];
    
    VCSix * vc06 = [[VCSix alloc] init];
    
    vc01.view.backgroundColor = [UIColor blueColor];
    vc02.view.backgroundColor = [UIColor yellowColor];
    vc03.view.backgroundColor = [UIColor purpleColor];
    vc04.view.backgroundColor = [UIColor grayColor];
    vc05.view.backgroundColor = [UIColor greenColor];
    vc06.view.backgroundColor = [UIColor orangeColor];
    
    vc01.title = @"视图1";
    vc02.title = @"视图2";
    vc03.title = @"视图3";
    vc04.title = @"视图4";
    vc05.title = @"视图5";
    vc06.title = @"视图6";
    
    NSArray * arrayVC = [NSArray arrayWithObjects:vc01, vc02, vc03, vc04, vc05, vc06, nil];
    
    UITabBarController * tbc = [[UITabBarController alloc] init];
    
    tbc.viewControllers = arrayVC;
    
    tbc.tabBar.translucent = NO;
    
    self.window.rootViewController = tbc;

我们运行会发现只显示了四个视图,剩下两个在More里:
在这里插入图片描述
这时候就会出现新的功能,视图的顺序就可以调整:
在这里插入图片描述
我们可以通过拖动来选择显示哪个视图。
这时候我们给类的声明里添加两个协议,通过协议方法来显示这个过程:

@interface SceneDelegate : UIResponder <UIWindowSceneDelegate, UITabBarControllerDelegate>

协议里方法的创建:

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers {
    NSLog(@"编辑器前");
}

- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed{
    NSLog(@"即将结束");
}

- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed {
    if (changed == YES) {
        NSLog(@"顺序发生改变");
    }
    NSLog(@"已经结束");
}

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了你的问题。使用HTML5的新元素进行页面分栏设计非常简单,只需要使用新的语义化标签,如```<header>```、```<section>```、```<article>```、```<aside>```和```<footer>```等等。这些标签可以更好地描述页面内容的结构,并且可以帮助搜索引擎更好地理解页面内容。下面是一个使用HTML5新元素进行分栏设计的例子: ``` <!DOCTYPE html> <html> <head> <title>页面分栏设计</title> <style> .container { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: stretch; } .container section { flex-basis: 30%; margin-bottom: 30px; } .container aside { flex-basis: 20%; margin-bottom: 30px; } .container article { flex-basis: 60%; margin-bottom: 30px; } </style> </head> <body> <header> <h1>网站标题</h1> <nav> <ul> <li><a href="#">首页</a></li> <li><a href="#">文章</a></li> <li><a href="#">关于我们</a></li> </ul> </nav> </header> <main> <div class="container"> <section> <h2>栏目1</h2> <p>这是栏目1的内容</p> </section> <aside> <h2>侧边栏</h2> <p>这是侧边栏的内容</p> </aside> <article> <h2>文章标题</h2> <p>这是文章的内容</p> </article> </div> </main> <footer> <p>版权所有 © 2021</p> </footer> </body> </html> ``` 在上面的例子中,我们使用了```<header>```、```<nav>```、```<main>```和```<footer>```等HTML5新元素来表示页面的结构。同时,我们还使用了```<section>```、```<article>```和```<aside>```等标签来分别表示页面的不同部分。最后,我们使用了CSS的Flexbox布局来将页面分为三列,并且让它们自适应浏览器窗口大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值