具有嵌入在堆栈中的2个或更多个导航控制器

时间:2014-12-11 14:44:27

标签: ios uitableview swift uinavigationcontroller viewcontroller

我试图让两个导航控制器在同一个堆栈上,并在它们之间传递数据,解释这个的最好方法是通过下图。

storyboards

第一个导航控制器(最左边的导航控制器)连接到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的原因是我可以向导航栏添加一个条形按钮项。

2 个答案:

答案 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;