使用容器视图控制器时,显示segue莫名其妙地更改为模式segue

时间:2015-06-29 16:12:06

标签: ios objective-c iphone

我不知道确切原因,但我猜它与正在使用的容器视图控制器有关。我实际上使用了几个容器,一个用于SWRevealViewController,其后端控件包含通用UIViewController,前端控件包含UINavigationController。此导航控制器的根视图控制器是另一个容器视图控制器,MainViewController,其中包含UIPageViewController。页面视图控制器有3 UITableViewController s,当我尝试从那些表视图控制器导航到相关的视图控制器(通过segue),我希望它是一个推送过渡,它进行模态转换,所以什么给出?

我认为这与层次结构有关,但现在它与所有这些视图控制器有点混乱,我想我在某些时候打破了我的大脑。如果知道错误的人可以解释,我真的很感激。

2 个答案:

答案 0 :(得分:0)

遇到了同样的问题并试图解决了近2天,最后解决了这个问题。

查看层次结构:

容器视图

  • 第一控制者(容器的直接子女)
  • 第二控制器(容器的直接子)
    • 第三控制器
    • 第四控制器

解决方案

  • 将导航控制器添加到第一个控制器
  • 将导航控制器添加到第二个控制器

当想要显示任何控制器而不是呈现控制器本身呈现UINavigationController时,这将解决不发生segue推动动画的问题......

示例代码,希望它有所帮助:

import UIKit

class ViewController: UIViewController {

    var loginViewNavigation  : UINavigationController!
    var singupViewNavigation : UINavigationController!

    override func viewDidLoad() {
        super.viewDidLoad()

        var storyBoard = UIStoryboard(name: "User", bundle: nil)

        loginViewNavigation  = storyBoard.instantiateViewControllerWithIdentifier("LoginViewNavigation") as! UINavigationController
        singupViewNavigation = storyBoard.instantiateViewControllerWithIdentifier("SignupViewNavigation") as! UINavigationController

        self.addChildViewController(loginViewNavigation)
        self.addChildViewController(singupViewNavigation)

        self.view.addSubview(loginViewNavigation.view)
    }
}

要观察的是使用要显示的控制器的UINavigationController而不是ViewController

答案 1 :(得分:0)

Thanks for the replies but I got it working without the use of segues and the storyboard, by pushing the view controller in tableView delegate manually, like this:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    PlaceViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"placeViewController"];
    vc.place = self.places[indexPath.row];

    [self.navigationController pushViewController:vc animated:YES];

}