• 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

  • 相关阅读:
    centos ppp拨号
    Xen、KVM和VirtualBox比拼
    static用法一
    linux浏览器,邮件客户端,输入法,双屏设置,应用软件,gnome-screenshot/scrot -s截图,office
    OpenGl学习总结
    DICOM医学图像处理:DCMTK在VS2012中的配置
    linux下用mail发送邮件
    (HLS播放器之中的一个)HLS协议之M3U8解析
    tcpdump抓包分析具体解释
    对账简单说
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5197635.html
Copyright © 2020-2023  润新知