我正在实现navigationControllerDelegate功能:
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
print("callin the Navigation Controller Delgate")
if viewController === self {
print("Calling the Navigation Controller delegate because is self and going to call tapButton")
//want to know who was previously on top of navigation.
}
}我想知道哪一个是从堆栈中删除的viewController,因为苹果文档说
viewController视图控制器,其视图和导航项属性正在显示。
这意味着这一假设是正确的:
viewController == navigationController.topViewController或者这个:
viewController == navigationController.visibleViewController如果不是,那么其中之一就是将要被删除的viewControllers。它并不适合我,因为func参数名是willShow viewController,或者只是一个花哨的名称,将显示已经显示。
因此,如果不知道如何从委托中删除哪个VC,我可能知道要从导航堆栈中删除哪个VC。
发布于 2020-01-23 18:23:12
如果委托提供被删除的viewController,那就太好了,但是我发现它只是为了保持引用而直接前进。
weak var lastRemovedViewController: UIViewController? = nil
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
defer { lastRemovedViewController = viewController }
print("Navigation Removed \(lastRemovedViewController.debugDescription)")
}发布于 2019-08-01 21:07:04
是的是答案,在委托函数中传递的viewController与topViewController相同,也等于navigationController.visibleViewController。因此,无法知道哪一个是从堆栈中删除的viewController。
https://stackoverflow.com/questions/57279212
复制相似问题