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
中学习协议和委托
我正在尝试访问导航堆栈中的前一个 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
中学习协议和委托