我的应用有类别,此类别可以包含无限的子类别或视频。我的主要View控制器有一个uicollection vith单元格。我需要的是,当我选择一个类别时,如果类别有子类别,那么创建其他视图控制器,如第一个带子类别,但如果类别有视频则转到其他不同的视图控制器。
我认为我需要在我的主视图控制器中从我的单元格中获得两个segues:
我想从我的voew控制器的单元格中拖出一个segue到自己。所以我可以推动"无限"该特定视图控制器的实例(适用于所有可能的子类别)。
但我不知道如何将视线控制器中的segue拖到自身。当我试图拖动第二个segue xcode删除了我的第一个segue。
谢谢你的朋友。
答案 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)
首先,在代码库中的某个地方的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()