我试图让两个导航控制器在同一个堆栈上,并在它们之间传递数据,解释这个的最好方法是通过下图。
第一个导航控制器(最左边的导航控制器)连接到TabBarController。
将数据从TEST tableViewController传递到第二个tableViewController(subDuaList)时,我在prepareForSegue方法的代码中出错...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var subDua:subDuaList = segue.destinationViewController as subDuaList //ERROR OCCURS HERE
var Index = tableView!.indexPathForSelectedRow()?.row
var duaIndex = 130 - Index!
var selectedDua = self.packagedChapter[duaIndex]
println(selectedDua.title)
subDua.duaArray = selectedDua.dataArray
subDua.rowPressed = Index
}
在导航控制器中嵌入第二个tableViewController的原因是我可以向导航栏添加一个条形按钮项。
答案 0 :(得分:1)
修改强>
正如@Shim评论的那样,我的回答只是解释了错误输出的原因,但没有说明我已经在你对你的问题的评论中说过了:
不允许在现有导航堆栈上推送UINavigationController
。因此,您应该删除第二个导航控制器,只需将UIBarButtonItem
添加到navigationItem
视图控制器的subDuaList
。
您的错误原因是,segue.destinationViewController
是第二个UINavigationController
而不是subDuaList
视图控制器。
如果允许,您可以修改代码,如下所示:替换:
var subDua:subDuaList = segue.destinationViewController as subDuaList //ERROR OCCURS HERE
与
var navCtrl:UINavigationController = segue.destinationViewController as UINavigationController
var subDua:subDuaList = navCtrl.childViewControllers[0] as subDuaList
答案 1 :(得分:1)
您不需要新的导航控制器来添加条形按钮项。您可以在故事板中添加一个条形按钮项目,方法是将其拖动到导航栏上(如果视图控制器位于导航堆栈中,并且您没有看到它,请检查检查器中的模拟指标),或者您可以添加它在代码中如此:
self.navigationItem.rightBarButtonItem = myBarButtonItem;