我有一个ViewController,它有一个带有动态tableview的子控制器。
在点击表格单元格时,我需要切换到新视图。
我尝试了各种方法,包括直接控制从单元格拖动(导致“分离控制器”警告)但收效甚微,目前情况如下。
子控制器(currentName,currentType是父,myHome可以拾取的全局变量)
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
currentName = "John"
currentType = 1
let segueVC = myHome()
segueVC.segueToMain()
}
家长控制器(myHome)
func segueToMain() {
dispatch_async(dispatch_get_main_queue()){
self.performSegueWithIdentifier("home_myMain", sender: self)
}
}
我知道这可能是可怕的,但它似乎工作正常,因为它存储数据并转到父函数。但是,尝试segue导致'Receiver没有带标识符的segue'错误。 segue id完全正确。它链接到导航控制器。
我有一种感觉,我需要一些代表等,但我不确定如何处理它们。摆脱导航控制器并直接查看视图没有任何区别。
非常感谢任何有关如何触发此segue的帮助。
修改
关于建议直接来自孩子的segue的答案,这里的设置似乎导致“分离的”控制器错误。为了记录,我很乐意使用这种方法,但所有尝试都失败了。
父控制器(A)构建一个PageMenu类,它从Controller B获取其页面结构.B有一个表格,其中的单元格直接被视为另一个视图。
A按如下方式构建菜单
self.addChildViewController(self.pageMenu!)
self.view.addSubview(pageMenu!.view)
self.pageMenu!.didMoveToParentViewController(self)
PageMenu使用B类作为每个菜单页面的模板。
故事板上A和B之间没有物理链接 - 只有A的类将B设置为孩子。
来自B的Segues因“分离的控制器”错误而失败,所以也许我在子设置中遗漏了一些东西?
由于
答案 0 :(得分:0)
您不能只分配父视图控制器的新实例并要求它执行segue - 当您直接实例化视图控制器时,它不会与故事板关联,这是为什么你得到一个例外,说明该视图控制器没有指定标识符的segue。
即使您从故事板中实例化了一个新实例,您仍然会收到错误,因为新实例不会出现在屏幕上,从而导致您尝试在视图控制器上显示视图控制器的消息不在视图层次结构中。
您需要子视图控制器引用包含它的父视图控制器实例,然后使用该实例调用segue。
此外,不需要dispatch_async
- 将在主队列上调用tableview委托方法。
最后,根据惯例,类名以大写字母开头,因此myHome
应为MyHome
(或更好,类似于MyHomeViewController
)