IOS SegmentedControl利用addChildViewController切換UIViewController

先上效果圖

Paste_Image.png
Paste_Image.png

首先定義3個UIViewController

//全局變量
    var chatVC:UIViewController!  //第一個
    var friendVC:UIViewController!  //第二個
    var currentVC:UIViewController! //公共變量

在viewDidLoad中初始化Controller

override func viewDidLoad() {
        super.viewDidLoad()
        //根據(jù)storyboard獲取  建議 Identifier名稱與文件名相同
        chatVC = self.storyboard?.instantiateViewControllerWithIdentifier("KIMListViewController") as! KIMListViewController
        self.addChildViewController(chatVC)
        friendVC = self.storyboard?.instantiateViewControllerWithIdentifier("KFriendTableViewController") as! KFriendTableViewController
        self.view.addSubview(chatVC.view)
        currentVC = chatVC
    }

然后拖拽一個SegmentedControl事件方法

@IBAction func ChangeVC(sender: AnyObject) {
        let seg = sender as! UISegmentedControl
        switch seg.selectedSegmentIndex{
        case 0:
            self.replaceController(oldController: currentVC, newController: chatVC)
            break
        case 1:
            self.replaceController(oldController: currentVC, newController: friendVC)
            break
        default:break
        }
    }

這里需要一個公共方法來切換Controller

func replaceController(oldController oldController:UIViewController,newController:UIViewController)
    {

        //判斷同意Controller不執(zhí)行切換操作
        if oldController == newController {return}
        self.addChildViewController(newController)
        
        /**
        *   著重介紹一下它
        *  transitionFromViewController:toViewController:duration:options:animations:completion:
        *  fromViewController   當前顯示在父視圖控制器中的子視圖控制器
        *  toViewController  將要顯示的姿勢圖控制器
        *  duration    動畫時間(這個屬性,old friend 了 O(∩_∩)O)
        *  options     動畫效果(漸變,從下往上等等,具體查看API)
        *  animations     轉(zhuǎn)換過程中得動畫
        *  completion     轉(zhuǎn)換完成
        */
        self.transitionFromViewController(oldController, toViewController: newController, duration: 0.2, options:.TransitionNone, animations: nil) { (finished:Bool) -> Void in
            if finished{
                newController.didMoveToParentViewController(self)
                oldController.willMoveToParentViewController(nil)
                oldController.removeFromParentViewController()
                self.currentVC = newController
            }else{
                self.currentVC = oldController
            }
        }
    }

運行 就可以看到效果啦,大家可以試試

轉(zhuǎn)載修改:http://www.tuicool.com/articles/3ymMzub

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容