如何检测 UIViewController 内的 UITableView 类?

Posted

技术标签:

【中文标题】如何检测 UIViewController 内的 UITableView 类?【英文标题】:How to detect class of UITableView inside of UIViewController? 【发布时间】:2016-05-19 09:01:14 【问题描述】:

我使用PageMenu 进行视图控制器分页。我有一个主视图控制器,后来我在其中添加了 3 个 UITableViewController。现在,当我从 MainControllers 第二个选项卡转到某个 ViewController 并返回时,它会看到它就像第一个选项卡,而不是第二个选项卡。

现在我想在我的主 ViewController 中检测 UITableView 类。我该怎么做?

我试过了:

for vc in navigationController!.viewControllers 
        if vc is UITableViewController 
            print("POPO \(vc)")
        
    

但此代码不打印任何内容。我做错了什么?

【问题讨论】:

isKindOfClass(UITableViewController) 会有所帮助 这意味着你的导航控制器的视图控制器都不是 UITableViewControllers。如果没有更多关于应用结构的背景信息,就很难提供帮助。 @Jeff 不,我有!你能看看那些回购吗?你会理解这个概念 @PKT 它对我也没有帮助 【参考方案1】:

试试

if vc.isKindOfClass(UITableViewController) 
    print("POPO \(vc)")

或者

if let viewController = vc as? UITableViewController  
    print("POPO \(vc)")

【讨论】:

但在这种情况下它也不会打印任何东西 试试vc.isKindOfClass(UIViewController) 看看它是否都打印出来 基本上我认为您的 ViewController 不在导航堆栈上【参考方案2】:
for vc in navigationController!.viewControllers 
    if vc is UITableViewController 
        print("POPO \(vc)")
    

这将仅在 TableViewController 仍在 UINavigationController 堆栈中时打印语句。如果您访问了TableViewController 并通过pop 返回,则从导航堆栈中删除相同的内容,并且不再上面的代码片段打印任何内容。确保 TableViewController 在堆栈中以获取此方法中的结果。

【讨论】:

以上是关于如何检测 UIViewController 内的 UITableView 类?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 iOS UIViewController 是不是被交互或触摸

如何检测 UIViewController 外部的点击/触摸

iOS Dev - 如何检测用户通过按“返回”访问此 UIViewController

从 uiviewcontroller 操作 uicollectionviewcell 内的 uicollectionview

根 ViewController 内的 UIViewController 不旋转

在 UINavigationController 内的 UIViewController 内加载 UITableViewController