如何从视图控制器创建一个segue到自身

时间:2015-07-27 07:58:18

标签: ios xcode swift

我的应用有类别,此类别可以包含无限的子类别或视频。我的主要View控制器有一个uicollection vith单元格。我需要的是,当我选择一个类别时,如果类别有子类别,那么创建其他视图控制器,如第一个带子类别,但如果类别有视频则转到其他不同的视图控制器。

我认为我需要在我的主视图控制器中从我的单元格中获得两个segues:

  • 其中一个目的地显示视频视图控制器
  • 其他去自我显示所有子类别。

我想从我的voew控制器的单元格中拖出一个segue到自己。所以我可以推动"无限"该特定视图控制器的实例(适用于所有可能的子类别)。

但我不知道如何将视线控制器中的segue拖到自身。当我试图拖动第二个segue xcode删除了我的第一个segue。

谢谢你的朋友。

4 个答案:

答案 0 :(得分:7)

只需从代码中创建自定义segue。您不仅限于使用故事板时的一个segue。

 UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
 MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
 [self prepareForSegue:segue sender:sender];
 [segue perform];

或创建一个带ID的视图控制器并将其推送

UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyController"];
[self.navigationController pushViewController: myController animated:YES];

答案 1 :(得分:1)

斯威夫特4:

首先,在代码库中的某个地方的UIViewController上添加此类扩展:

extension UIViewController {
    class func storyboardInstance(storyboardId: String, restorationId: String) -> UIViewController {
        let storyboard = UIStoryboard(name: storyboardId, bundle: nil)
        return storyboard.instantiateViewController(withIdentifier: restorationId)
    }
}

然后实例化YourViewController类的实例(使用上面的扩展名),并从navigationController推送到它:

let destinationVC = YourViewController.storyboardInstance(storyboardId: "YourStoryboardName", restorationId: "idYouSetInStoryboard") as! YourViewController
self.navigationController?.pushViewController(destinationVC, animated: true)

答案 2 :(得分:0)

你需要删除segue并添加代码来创建VC并在didSelectRowAtIndexPath中点击单元格时推送它:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){

    // Create your view controller and push it
    // pass data if needed
    self.navigationController.pushViewController(yourViewController, animated: YES);
}

答案 3 :(得分:0)

以下是基于@MaciekWrocław

的Swift的答案
let destinationViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DestinationViewController")

let segue = UIStoryboardSegue(identifier: "SegueToProfileViewController",
                                      source: self,
                                      destination: anotherProfileVC,
                                      performHandler: {
                                                self.navigationController?.show(anotherProfileVC, sender: self)
        })

        self.prepare(for: segue, sender: user)
sege.perform()