导航堆栈中先前viewcontroller的swift访问属性

时间:2015-04-09 04:06:52

标签: ios swift uiviewcontroller uinavigationcontroller

我正在尝试访问导航堆栈中的上一个viewcontroller。我想在回弹之前设置标签的文本属性。它在函数中的第二行之后崩溃。 谢谢你的帮助。

func goBack(){
    let i = (navigationController?.viewControllers.count)! - 1
    let itemViewController = navigationController?.viewControllers[i] as     ItemViewController
    itemViewController.typeValueLbl.text = itemName
    navigationController?.popViewControllerAnimated(true)
}

2 个答案:

答案 0 :(得分:1)

您正在尝试设置之前控制器的属性。

执行此操作的理想方法是使用协议和代理。

在PUSHED类中编写一个协议并声明一个委托属性。

当你的ItemViewController推送这个类时,将委托设置为self。

然后你可以在goBack方法中调用设置标签文本的委托方法。

在Swift中学习协议和代理refer documentation

答案 1 :(得分:0)

来自this主题

的引用
  

以下是接受答案的实施:

- (UIViewController *)backViewController {
NSInteger numberOfViewControllers = self.navigationController.viewControllers.count;

if (numberOfViewControllers < 2)
    return nil;
else
    return [self.navigationController.viewControllers objectAtIndex:numberOfViewControllers - 2]; }