1

我有如下视图控制器

父视图控制器

@interface Parent : UIViewController
{
} 

子视图控制器

@interface Child : Parent
{
}

现在我想要父视图控制器中的当前视图控制器名称,我已经搜索但得到了简单的线索。

如果它是基于导航的应用程序,您可以通过以下方式获取当前视图控制器,

UIViewController *currentVC = self.navigationController.visibleViewController;

但是在父视图控制器中访问当前视图控制器名称的正确过程是什么?

4

3 回答 3

1

我已经建立了答案,

在父视图控制器中:

- (void)viewDidLoad
{
    UIViewController *currentVC = self.navigationController.visibleViewController;
    NSLog(@"The Current Class : %@", [self getClassName:currentVC]);
}

- (NSString*) getClassName:(id) obj
{   
    const char* className = class_getName([obj class]);
    NSString *clsName = [@"" stringByAppendingFormat:@"%s",className];

    return clsName;
}

当我们从 Child ViewController 调用 [super viewDidLoad] 时,Parent ViewController 被初始化,这里我取当前视图控制器的类名。所以在我的应用程序中,我不想在每个视图控制器中编写这行代码,而是在父视图控制器中编写。

注意:这仅适用于基于导航的应用程序,因为我们从 navigationController 获取当前 visibleViewController

于 2013-02-28T08:27:24.530 回答
1

尝试这个

    for(UIViewController * view in self.navigationController.viewControllers)
    {
        if([view isKindOfClass:[Child class]])
        {
           //child VC is displayed on screen
        }
    }
于 2013-02-28T06:06:57.770 回答
1

下面的代码可以提供帮助。我没有尝试过,但让我知道它是否有效

在Parent类中编写如下方法

 -(void)getClassName:(NSString*)className{
   NSLog(className);
   //Your code here
 }

以下行您需要访问当前视图控制器名称

 [self getClassName:NSStringFromClass([self class])];

希望这篇文章有帮助

于 2013-02-28T06:20:22.877 回答