UITabBarController 是一个常用的框架级控件

他的功能和UINavigationController比较类似

如下图:

我们可以看到底下工具栏有四个按钮分别可以展示四个ViewController


下来我们用Swift语言来实现一下这个控件

首先,我们创建四个ViewController 准备测试

创建完成之后在AppDelegate的启动方法中创建UITabBarController

   
    func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        //创建ViewController
        let homeVC=HomeViewController()
        let enjoyVC=EnjoyViewController()
        let exploreVC=ExploreViewController()
        let userinfoVC=UserInfoViewController()
        
        //设置ViewController在工具栏的图标
        homeVC.tabBarItem.image=UIImage(named: "icon_tab01_normal.png")
        enjoyVC.tabBarItem.image=UIImage(named: "icon_tab02_normal.png")
        exploreVC.tabBarItem.image=UIImage(named: "icon_tab03_normal.png")
        userinfoVC.tabBarItem.image=UIImage(named: "icon_tab04_normal.png")
        
        //设置ViewController在工具栏的名称
        homeVC.tabBarItem.title="首页"
        enjoyVC.tabBarItem.title="关注"
        exploreVC.tabBarItem.title="探索"
        userinfoVC.tabBarItem.title="我的"
        
        //将以上的ViewController天剑到UITabBarController中
        let tabBar=UITabBarController()
        tabBar.viewControllers=[homeVC,enjoyVC,exploreVC,userinfoVC]
        //将window的跟视图设置为tabBar
        self.window?.rootViewController=tabBar
        self.window?.backgroundColor=UIColor.whiteColor()
        
        return true
    }
运行我们已经看到效果了

点击工具栏四个按钮已经可以切换ViewController了

如果我们刚才创建的ViewController没有做区分 可能看不出来效果

可以给四个ViewController分别设置一下背景色看看

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.view.backgroundColor=UIColor.grayColor()
        
    }


设置选中之后工具栏的图标

刚才我们尝试了设置工具栏的图标和名称

设置选中状态的图标其实很简单

     homeVC.tabBarItem.selectedImage
直接给selectedImage 赋值即可


工具栏图标超过5个之后

我们刚才给工具栏创建了四个标签,也就是当前的UITabBarController容纳了四个UIViewController下来我们继续添加

 
    func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        let homeVC=HomeViewController()
        let enjoyVC=EnjoyViewController()
        let exploreVC=ExploreViewController()
        let userinfoVC=UserInfoViewController()
        let homeVC1=HomeViewController()
        let enjoyVC1=EnjoyViewController()
        let exploreVC1=ExploreViewController()
        let userinfoVC1=UserInfoViewController()
        
        homeVC.tabBarItem.image=UIImage(named: "icon_tab01_normal.png")
        enjoyVC.tabBarItem.image=UIImage(named: "icon_tab02_normal.png")
        exploreVC.tabBarItem.image=UIImage(named: "icon_tab03_normal.png")
        userinfoVC.tabBarItem.image=UIImage(named: "icon_tab04_normal.png")
        homeVC1.tabBarItem.image=UIImage(named: "icon_tab01_normal.png")
        enjoyVC1.tabBarItem.image=UIImage(named: "icon_tab02_normal.png")
        exploreVC1.tabBarItem.image=UIImage(named: "icon_tab03_normal.png")
        userinfoVC1.tabBarItem.image=UIImage(named: "icon_tab04_normal.png")
        
        homeVC.tabBarItem.title="首页"
        enjoyVC.tabBarItem.title="关注"
        exploreVC.tabBarItem.title="探索"
        userinfoVC.tabBarItem.title="我的"
        homeVC1.tabBarItem.title="首页1"
        enjoyVC1.tabBarItem.title="关注1"
        exploreVC1.tabBarItem.title="探索1"
        userinfoVC1.tabBarItem.title="我的1"
        
        
        
        let tabBar=UITabBarController()
        tabBar.viewControllers=[homeVC,userinfoVC,homeVC1,enjoyVC1,exploreVC1,userinfoVC1]
        
        tabBar.delegate=self
    
        self.window?.rootViewController=tabBar
        self.window?.backgroundColor=UIColor.whiteColor()
        
        return true
    }

我们在刚才的基础上有添加了四个ViewController

运行,我们看到最后一个按钮变成了More ...

点击More可以打开剩余几个被隐藏的图标

同时我们发现点开More之后 右上角还有一个Edit按钮,点击之后可以对几个图标的顺序自由调整


但是,当我们调整完顺序之后,在重启应用,发现顺序又还原了,并没有保存下来

如果想把调整的顺序保存起来我们得知道几个UITabBarController的代理方法


UITabBarControllerDelegate 几个简单方法

首先我们给添加TabBar的类 AppDelegate添加协议



设置代理

        tabBar.delegate=self

实现一个代理方法
    func tabBarController(tabBarController: UITabBarController,didEndCustomizingViewControllers viewControllers: [AnyObject],changed: Bool) {
        //调整完顺序之后调用
        let vcs=tabBarController.viewControllers
        println(vcs)
    }


添加完成之后我们运行程序,测试

如果一切正常就可以将当前的ViewController按照顺序打印出来。

如果我们想保存可以在这个方法里面做操作(可以将顺序存储在userdefault中,下次打开首先读取userdefault中数据调整顺序)


还有一个比较重要的代理方法

    optional func tabBarController(tabBarController: UITabBarController,didSelectViewController viewController: UIViewController)

选中某一个标签之后调用的


UITabBarController两个常用属性


设置标志

        //设置右上角数字
        homeVC.tabBarItem.badgeValue="8"

效果如下



设置默认打开的UIViewController

        tabBar.selectedindex=2

运行后直接打开的不是第一个了 而是第三个(从0开始计数)


好了,有关UITabBarController 就讲这么多,后边再有会持续更新

苹果开发群 :414319235 欢迎加入 欢迎讨论问题

Swift UITabBarController 标签栏控制器的更多相关文章

  1. ios – UITabBarController – Child(Tab)ViewControllers的不正确和不一致的边界

    我有一个带有两个选项卡的UITabBarController.每个选项卡都是UITableViewController.当UITabBarController出现时,两个选项卡视图都有不正确的边界.第一个选项卡正确位于导航栏下方,但延伸到底部的选项卡栏下方.第二个选项卡是另一种方式,从导航栏下方开始,但在底部的选项卡栏之前正确停止.我正在创建和呈现TabBarController,如下所示:然后在

  2. iOS – UIToolBar作为UITextView的inputAccessoryView

    这是我的代码:解决方法如果工具栏中没有其他附近的按钮,工具栏似乎会将按钮的活动区域扩展到其边界之外.Apple工程师必须认为最好是猜测用户打算按哪个而不是根本不做出反应.

  3. ios – 隐藏TabBar并在按钮单击时显示NavigationController工具栏

    我有以下视图层次结构:标签栏控制器–>导航控制器–>自定义视图控制器在我的自定义视图中,我希望TabBar消失并显示工具栏.与按下“选择”时的iOS7原生照片应用程序非常相似.我尝试了不同的解决方案,我发现了SO,但设法得到:>TabBar隐藏,工具栏显示黑色间隙>隐藏TabBar并隐藏工具栏>TabBar隐藏的工具栏显示与底部的间隙.但是,自定义视图内容到达屏幕底部(在工具栏下方和标签栏位于同一

  4. ios – 工具栏reappers后,状态栏出现在QLPreviewController中

    状态栏最初隐藏在Info.plist中,“状态栏最初隐藏”设置为YES,“查看基于控制器的状态栏外观”设置为NO.但是当我呈现一个QlPreviewController时,经过两次点击文件使工具栏消失并再次出现,状态栏也出现在应用程序中.知道如何防止这种情况发生吗?解决方法在Info.plist文件中,将UIViewControllerBasedStatusBarappearance设置为true

  5. ios – UIToolbar不显示UIBarButtonItem

    解决方法发现答案感谢苹果iOS论坛!当您使用导航控制器的工具栏时,必须在视图控制器toolbaritems属性上设置工具栏按钮,而不是在实际工具栏上.例如:

  6. iOS7 Safari中的全屏模式

    我正在使用SenchaTouch开发移动网站.在iOS7Safari中,我无法创建顶级地址栏和下面的工具栏消失了.Sencha过去常常处理iOS6,但iOS7最近的一些变化导致了这个问题.http://java.dzone.com/articles/safari-ios-7-and-html5我阅读了上面的链接&对于HTML5游戏而言,这似乎也是一个问题.一些其他应用程序.适用于iOS6的旧win

  7. UITabBarController和UINavigation Controller的iOS8旋转问题

    iOS8有一个问题.这里我有我的视图层次结构.窗口==>UITabBarController==>2标签标签1==>UINavigationController1==>UIViewController1作为根视图控制器标签2==>UINavigationController2==>UIViewController2作为根视图控制器现在一切都很完美,只有一个方向.但问题在于此测试步骤:>将日志放入V

  8. ios – 如何在Swift的Storyboard上使用UITabBarController内的导航控制器

    我正在使用swift.我想使用TabBar中的导航与Storyboard.起初,第一个显示屏显示在标签菜单的内部.但是当我移动到第二个显示时,第二个显示没有标签菜单显示.我选择了segue类型“show”如何在所有视图上继续显示标签菜单?

  9. ios – 使用UIWebView的手势识别

    谢谢.克里斯谢谢克里斯解决方法尝试将UIWebView包装在UIView容器中,并在容器视图上设置手势识别器.触摸未由UIWebView处理的事件将被传递给视图层次结构,并被容器视图拦截,假设它实现了相应的处理程序(并且这些处理程序应该实现隐藏工具栏的代码…

  10. ios – 以编程方式创建uiTabBarController

    你会在哪里创建它?tabBarController必须是根视图控制器,不能是任何其他视图控制器的子级.Btw,确保你实现:

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部