• iOS ChildViewController使用示例


    storyboard截图:

    ViewController代码:

    //
    //  ViewController.swift
    //  TestAddChildViewController
    //
    //  Created by Fran on 16/2/18.
    //  Copyright © 2016年 kimree. All rights reserved.
    //
    
    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var scrollMenu: UIScrollView!
        
        
        let colorArray = [UIColor.whiteColor(), UIColor.redColor(), UIColor.grayColor(), UIColor.yellowColor(), UIColor.blueColor()]
        var buttonVCMapping: [UIButton: UIViewController] = [:]
        var currentVC: UIViewController!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            
            // 如果不加这个 有navigationController的时候 scrollView的contentOffset会自动去变化适应
            self.automaticallyAdjustsScrollViewInsets = false
            
            scrollMenu.backgroundColor = UIColor.redColor()
            
            self.navigationController?.navigationBar.backgroundColor = UIColor.redColor()
            
            addScrollMenuButtons()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
        
        override func viewDidAppear(animated: Bool) {
            super.viewDidAppear(animated)
        }
        
        // 添加scrollView上面的button
        func addScrollMenuButtons(){
            // scrollMenu height = 50 已知
            
            for var i = 0; i < 5; i++ {
                let button = UIButton(type: UIButtonType.Custom)
                button.setTitle("button(i)", forState: UIControlState.Normal)
                button.frame = CGRectMake(CGFloat(i * 100) + 10, 5, 90, 40)
                scrollMenu.addSubview(button)
                
                // 记录button与对应要显示的viewcontroller之间的映射
                addButtonVCMapping(button, index: i)
                
                // button点击事件
                button.addTarget(self, action: "menuButtonClick:", forControlEvents: UIControlEvents.TouchUpInside)
            }
            
            scrollMenu.contentSize = CGSizeMake(CGFloat(5 * 100) + 10, 49)
        }
        
        // button and viewcontroller mapping
        func addButtonVCMapping(button: UIButton, index: Int){
            let vc = UIViewController()
            vc.view.frame = CGRectMake(0, 64 + 50, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - 64 - 50)
            vc.view.backgroundColor = colorArray[index]
            
            buttonVCMapping[button] = vc
            self.addChildViewController(vc)
            
            // 设置初始时显示哪一个childViewController
            if index == 0{
                self.view.addSubview(vc.view)
                currentVC = vc
            }
        }
        
        // 点击scrollView上的button, 切换对应的childViewController
        func menuButtonClick(button: UIButton){
            let toVC = buttonVCMapping[button]
            if toVC != nil && toVC != currentVC{
                
                // 切换界面显示的childViewController
                self.transitionFromViewController(currentVC, toViewController: toVC!, duration: 0.5, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: nil, completion: { (finished: Bool) -> Void in
                    if finished{
                        toVC!.didMoveToParentViewController(self)
                        self.currentVC.willMoveToParentViewController(nil)
                        
                        self.currentVC = toVC
                    }
                })
            }
        }
    }
    

      

    运行效果如下:

    初始,默认使用button0的childViewController

    button0

    button1

    button2

    button3

    button4

  • 相关阅读:
    Linux命令-网络命令:netstat
    Linux命令-网络命令:traceroute
    Linux命令-网络命令:lastlog
    Linux命令-网络命令:last
    mongodb3.4 安装及用户名密码设置
    MySQL表名不区分大小写的设置方法
    数据库设计中的四个范式
    dubbo本地调试直连
    com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024)
    Linux服务器时间同步
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5197635.html
Copyright © 2020-2023  润新知