12

我在 navigationController 堆栈上获取 viewControllers,如下所示。现在我需要检查顶部的控制器是否是已知的 vc 之一。如何获取 vc 类名以便进行比较?谢谢你。

NSArray *viewContrlls=[[self navController] viewControllers];
[viewContrlls lastObject]

就像是,

if ([[viewContrlls lastObject] name] isEqualToString @"viewControllerName"){
4

4 回答 4

33

使用这个它可以帮助你

 NSString *CurrentSelectedCViewController = NSStringFromClass([[((UINavigationController *)viewController1) visibleViewController] class]);
于 2012-11-29T10:32:24.997 回答
14

最常见的技术是使用-isKindOfClass

if ([[viewContrells lastObject] isKindOfClass:MyViewController.class]]) {
    // ...
}

使用NSStringFromClass比较字符串不是一个很好的解决方案,因为如果您重构视图控制器以重命名它,您的代码将会中断。

于 2012-11-29T11:04:57.167 回答
4
if ([NSStringFromClass([[viewContrlls lastObject] class]) isEqualToString: @"Whatever"]){
}

-isKindOfClass如果您更喜欢直接将实例与特定类进行比较,也可以使用。

于 2012-11-29T10:33:20.120 回答
-2

斯威夫特版本:

static func getClassNameAsString(className: AnyObject) -> String {
    return _stdlib_getDemangledTypeName(className).componentsSeparatedByString(".").last!
}
于 2015-03-10T11:42:06.203 回答