【问题标题】:How can a method tell which view controller called it方法如何判断哪个视图控制器调用了它
【发布时间】:2011-07-01 04:10:09
【问题描述】:

我想用我自己的方法获取当前的视图控制器。我的意思是我有两个调用相同方法的视图控制器。在那我想区分哪个视图控制器类正在调用该方法。

请帮帮我

【问题讨论】:

    标签: iphone objective-c ios ios4


    【解决方案1】:

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

    UIViewController *currentVC = self.navigationController.visibleViewController;
    

    【讨论】:

    • 我有一个后续问题。您将如何在 splitView 应用程序中获取当前的 detailVC.. 谢谢
    • @David DelMonte,抱歉回复延迟,但我对 SplitView 不太熟悉。谢谢。
    【解决方案2】:

    假设myCommonMethod: 是从两个视图控制器调用的通用函数,您可以使用NSObjectisMemberOfClass: 方法检查您的viewController 是否是类的成员。

    -(void) myCommonMethod:(UIViewController*) aViewController
    {
          if([aViewController isMemberOfClass:NSClassFromString(@"MyFirstController")])
          {
          }
          else if([aViewController isMemberOfClass:NSClassFromString(@"MySecondController")])
          {  
    
          }
    }
    

    【讨论】:

    • 我收到此错误:请求成员“navigationController”不是结构或联合
    • 我正在使用 EGORefereshTableHeaderView ,因为我正在调用 refreshLastUpdatedDate 函数。此函数由两个视图调用。所以最后更新的日期时间没有正确维护。我不确定如何在多个视图之间使用 EGORefreshTableHeaderView 类...请帮帮我
    • 如果你重构你的类名,这当然会破坏。请参阅stackoverflow.com/a/13624342/1431728 以获得更强大的解决方案。
    【解决方案3】:

    如果您的两个视图控制器都调用相同的函数,那么您可以将self 作为该方法中的参数传递,为此您可以将函数编写为 -

    -(void) functionName:(UIViewController*) viewController
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多