【问题标题】:swift access property of previous viewcontroller in navigation stack [duplicate]导航堆栈中先前视图控制器的快速访问属性[重复]
【发布时间】:2015-04-09 04:06:51
【问题描述】:
我正在尝试访问导航堆栈中的前一个视图控制器。我想在弹出标签之前设置标签的文本属性。它在函数的第二行之后崩溃。
谢谢你的帮助。
func goBack(){
let i = (navigationController?.viewControllers.count)! - 1
let itemViewController = navigationController?.viewControllers[i] as ItemViewController
itemViewController.typeValueLbl.text = itemName
navigationController?.popViewControllerAnimated(true)
}
【问题讨论】:
标签:
ios
swift
uiviewcontroller
uinavigationcontroller
【解决方案1】:
您正在尝试设置以前控制器的属性。
理想的方法是使用协议和委托。
在您的 PUSHED 类中编写一个协议并声明一个委托属性。
当您的 ItemViewController 推送此类时,将委托设置为 self。
然后您可以在 goBack 方法中调用委托方法来设置您的标签文本。
学习 Swift 中的协议和委托refer documentation
【解决方案2】:
来自this线程的引用
这是接受的答案的实现:
- (UIViewController *)backViewController {
NSInteger numberOfViewControllers = self.navigationController.viewControllers.count;
if (numberOfViewControllers < 2)
return nil;
else
return [self.navigationController.viewControllers objectAtIndex:numberOfViewControllers - 2]; }