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

swift access property of previous viewcontroller in navigation stack

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

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

引自this 话题

Here's the implementation of the accepted answer:

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

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

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

理想的实现方式是使用协议和委托。

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

当您的 ItemViewController 推送此 class 时,将委托设置为自己。

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

在 Swift refer documentation

中学习协议和委托