首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NavigationController.topViewController在navigationController委托中等于viewController

NavigationController.topViewController在navigationController委托中等于viewController
EN

Stack Overflow用户
提问于 2019-07-30 20:01:28
回答 2查看 249关注 0票数 0

我正在实现navigationControllerDelegate功能:

代码语言:javascript
复制
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视图控制器,其视图和导航项属性正在显示。

这意味着这一假设是正确的:

代码语言:javascript
复制
viewController == navigationController.topViewController

或者这个:

代码语言:javascript
复制
viewController == navigationController.visibleViewController

如果不是,那么其中之一就是将要被删除的viewControllers。它并不适合我,因为func参数名是willShow viewController,或者只是一个花哨的名称,将显示已经显示。

因此,如果不知道如何从委托中删除哪个VC,我可能知道要从导航堆栈中删除哪个VC。

EN

回答 2

Stack Overflow用户

发布于 2020-01-23 18:23:12

如果委托提供被删除的viewController,那就太好了,但是我发现它只是为了保持引用而直接前进。

代码语言:javascript
复制
weak var lastRemovedViewController: UIViewController? = nil

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    defer { lastRemovedViewController = viewController }
    print("Navigation Removed \(lastRemovedViewController.debugDescription)")
}
票数 2
EN

Stack Overflow用户

发布于 2019-08-01 21:07:04

是的是答案,在委托函数中传递的viewController与topViewController相同,也等于navigationController.visibleViewController。因此,无法知道哪一个是从堆栈中删除的viewController。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57279212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档