检查View控制器类是否存在于视图控制器数组中

时间:2013-09-26 21:25:08

标签: ios uiviewcontroller uinavigationcontroller nsmutablearray nsarray

我正在尝试从self.navigationController.viewControllers检查视图控制器列表。

NSMutableArray *arrayOfControllers = [[NSMutableArray alloc] initWithObjects:self.navigationController.viewControllers, nil];

作为示例,这将返回如下数组:

array -- (
        (
        "<HomeViewController: 0xb1aca10>",
        "<LeftMenuViewController: 0xe751520>"
    )
)

我现在需要检查数组中是否存在HomeViewController我该怎么做?

我曾尝试[arrayOfControllers containsObject:[MESHomeViewController class]]),但这不会返回true。

4 个答案:

答案 0 :(得分:7)

遍历所有视图控制器并检查视图控制器是否为[MESHomeViewController class]。您不需要MESHomeViewController的实例来使用此方法。

for (UIViewController *vc in arrayOfControllers) {
    if ([vc isKindOfClass:[MESHomeViewController class]]) {
        //It exists
    }

答案 1 :(得分:1)

containsObject要求您传递特定实例,而不仅仅是您要查找的类的类型。如果您有对特定MESHomeViewController的引用,请将其作为参数传递给containsObject:

答案 2 :(得分:1)

[arrayOfControllers containsObject:[MESHomeViewController class]]

无效,因为指向控制器的指针位于数组中,而不是控制器的类名。

你应该可以简单地做

[arrayOfControllers containsObject:self] // if inside MESHomeVIewController
[arrayOfControllers containsObject:myHomeViewController] //The instance of MESHomeViewController

编辑:

如果您不想分配要检查的类,可以使用isKindOfClass:检查或改为创建一个包含类名而不是实际实例的数组

答案 3 :(得分:0)

您可以使用循环并使用isKindOfClass:

进行测试