【问题标题】:Custom segue to sibling view controller自定义 segue 到同级视图控制器
【发布时间】:2015-11-24 03:45:53
【问题描述】:

我有 3 页应该像这样继续...

  ,-(1)-> Home <-(2)-,
  v                  v
Login ----(3)---> Register

Login -&gt; Register segue 由“没有帐户?立即注册”触发。按钮,你知道的,类似的东西......另外,请注意单向箭头。

所有 segue 都已实现,除了一个:当触发具有此顺序的 segue 时:

Home -> Login -> Register -> Home

Register -&gt; Home 是通过后退按钮触发的。

基本上,我需要知道如何将RegisterparentViewController 设置为Home,以便在按下Back 按钮时(然后使用我的自定义展开segue 调用performSegueWithIdentifier),@987654330 @ 然后会展开到 Home

我相信,基于上面提到的 segue 订单链,Register 会展开为已解散的Login

附:我正在为视图使用界面构建器

附注LoginRegister 以模态方式呈现,因此它们位于 Home 之上

【问题讨论】:

  • 你能不能像用户一样用例子详细解释一下...
  • 如果它在同一层次结构中,您可以调用“self.navigationController?.popViewControllerAnimated(true)”或“presentViewController”并添加自定义动画。
  • @AAA 我相信我已经解释得够多了
  • @Karlos 我没有使用navigationController 这个

标签: ios swift swift2 segue ios9


【解决方案1】:

使用自定义动画将自定义动画添加到呈现视图控制器 您在注册和登录的后退按钮上调用了self. performAnimation() 功能。以下代码用于注册和主屏幕。

  // This function will be present in your Registration viewController
  func performAnimation() {
        //Your storyboard name
        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)

        let YourNavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("YourNavigationController") as! UINavigationController


        let  mainVC = mainStoryboard.instantiateViewControllerWithIdentifier("YourHomeScreenIdentifier") as! YourHomeScreen

        initialNavigationController.viewControllers = [mainVC]


        self.presentViewController(YourNavigationController,  animated: false, completion: nil)
        (mainVC as YourHomeScreen).fromRegisterSelector()
    }




   //These function or line of code should be present in your Home viewController
    func fromRegisterSelector()
    {
        hasComeHereFromRegVC = true
    } 


    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if hasComeHereFromRegVC
        {
            addSignInViewAndAnimateIt()
        }

    }    

    func addSignInViewAndAnimateIt()
    {
        hasComeHereFromRegVC = false

        let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)

        let mainNavigationController = mainStoryBoard.instantiateViewControllerWithIdentifier("YourNavigationController") as! UINavigationController

        let RegVC = mainStoryBoard.instantiateViewControllerWithIdentifier("RegViewController") as! YourRegViewController
        mainNavigationController.viewControllers = [RegVC]

        self.view.addSubview(mainNavigationController.view)
        self.view.bringSubviewToFront(mainNavigationController.view)

        UIView.animateWithDuration(0.3, animations: {
            // To change the screen sliding direction change the origin.x to origin.y and frame.width to frame.height in the line below
            mainNavigationController.view.frame.origin.x += self.view.frame.width

            }) { (finished) -> Void in

                mainNavigationController.view.removeFromSuperview()
        }
    }

希望这会对你有所帮助。

【讨论】:

  • @ton:我已经为您更新了模型转换的答案。要更改屏幕滑动方向,请将 origin.x 更改为 origin.y,将 frame.width 更改为 frame.height。试试看,让我知道结果。
猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 2016-04-24
  • 2012-03-02
  • 2012-07-28
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多