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

时间: 2024-11-04 06:56:59

iOS ChildViewController使用示例的相关文章

iOS ChildViewController与View

一.概述 在iOS中,ViewController与View是配对使用的,一个ViewController可以对应多个View,就是指View的父控制器.当然,一个ViewController也可以对应一个View,在View1中,添加另一个View1_1,使用addSubView方法,此时,也要在View1的控制器中,添加对应View1_1的ViewController控制器,使用addChildViewController方法. 二.使用 1. FirstViewController.m 1

聚合数据短息验证码iOS SDK 演示示例

第一步 获取短信SDK 在http://www.juhe.cn/docs/sdk/id/67下载最新版本的SDK,下载回来后解压,可以看到下面的文件结构: 其中SMSSDK.framework 为依赖库文件 SMSSDKDemo 为示例demo ,其中保存了短信SDK的演示项目代码. 第二步 导入聚合数据免费短信验证码SDK 短信SDK 使用如下方式完成集成.具体步骤如下: 将SMSSDK.framework 文件直接拖入项目中 第三步 添加SDK依赖库文件 第四步 添加代码 1 在appDel

iOS地图集成示例:百度地图POI检索

一.集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤) 1.登录  http://lbsyun.baidu.com  百度地图开发者平台,获取SDK和集成文档. 2.百度地图可以提供的一些服务 (1)地图:提供地图展示和地图操作功能: (2)POI检索:支持周边检索.区域检索和城市内兴趣点检索: (3)地理编码:提供经纬度和地址信息相互转化的功能接口: (4)线路规划:支持公交.驾车.步行.骑行,四种方式的线路规划: (5)覆盖物图层:支持在地图上添加覆盖物(标注.几何图形.热力

iOS 面试题 总结

#include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc"; printf("%d %d\n",sizeof(p),sizeof(q)); //getch(); } //结果 3,4 sizeof有什么作用呢? sizeof是C语言的关键字不并不是函数,这个很容易被忽略 sizeof(a)表示a在内存中所占的字节数 以下是windows

《OpenGL ES 2.0 Programming Guide》第12章“最简单的ReadPixels并保存为BMP”示例代码【C语言版】

由于<OpenGL ES 2.0 Programming Guide>原书并没有提供第12章的示例代码,书上的代码也只提到关键的步骤,而网上大多是Android/iOS版本的示例,C/C++的大都基于OpenGL或OpenGL ES 3.0,为了加深理解,遂自己实现了一份C语言版本的,希望能够帮助到同样喜欢OpenGL ES 2.0的同学. 废话不多说,直接上代码 #include "stdafx.h" #include "esUtil.h" #incl

iOS动画编程-2

第二章 核心动画渲染框架 虽然核心动画的图层和 Cocoa 的视图在很大程度上没有一定的相似性,但是他们两者最大的区别是,图层不会直接渲染到屏幕上. 在模型-视图-控制器(model-view-controller)概念里面 NSView 和 UIView 是典型的视图部分,但是在核心动画里面图层是模型部分.图层封装了几何.时间.可视化属性,同时它提供了图层现实的内容,但是实际显示的过程则不是由它来完成. 每个可见的图层树由两个相应的树组成:一个是呈现树,一个是渲染树.下图显示在 Mac OS

前端架构

框架层面:近几年前端发展很快,前端之所以叫前端因为前端是已经可以独立成为一种职业了,js也不再是十年前的玩具了,以前富客户端RIA的应用可能会用flash/flex或是silverlight,现在可以使用js来完成大部分的功能,因此js作为一门前端的支撑语言也不仅仅是进行的简单的编码,越来越多框架性的东西出现了.越来越多的开发模式转变为后端只是吐json的数据源,而前端做所有UI的事情. MVC MVC实现职责分离是很好的,大多数网站在后端都会引入MVC框架,对于一个前端负责所有呈现和前端业务逻

CoreAnimation编程指南

转自http://www.cocoachina.com/bbs/read.php?tid=124478 第一章      核心动画概念核心动画是一套包含图形绘制,投影,动画的Objective–C类集合.它通过开发人员所熟悉的应用程序套件和Cocoa Touch视图架构的抽象分层模式,同时使用先进的合作效果提供了一套流畅的动画.动态的动画接口很难创建,但是核心动画通过提供如下接口使这些创建起来变得更加简单:简单易用的高性能混合编程模型.类似视图一样,你可以通过使用图层来创建复杂的接口.轻量级的数

最简单的基于FFmpeg的移动端例子:Android HelloWorld

从本文开始打算记录一系列FFmpeg在Android/IOS开发的示例程序.前面几篇文章记录FFmpeg安卓端开发的例子,后面几篇文章记录FFmpeg IOS端开发的例子.这些例子中FFmpeg相关的代码源自于<FFmpeg示例合集>中的程序.本文记录第一个程序:安卓平台下基于FFmpeg的HelloWorld程序. Android程序FFmpeg类库使用说明 Android应用程序使用FFmpeg类库的流程图如下所示. 上图中的流程可以分为"编译FFmpeg类库".&qu