检测viewcontroller

时间:2012-05-21 16:00:35

标签: iphone ios4 ios5 uiviewcontroller detect

我有一个应用程序,它处理许多功能并且还有很多导航。

我在我的应用程序中使用了很多BOOL。我知道它效率不高。所以我想重新启动这些BOOL来创建更高效​​,更干净的应用程序。

这是我的问题。对于一个例子,假设我有3个UIViewControllers。

Test1,Test2,Test3

我需要从Test1和Test2视图控制器导航到Test3。此外,如果我从Test1导航到Test3 View Controller,我需要执行一个方法,如果我从Test2导航到Test3,我需要执行另一个方法。

目前我正在做的是,我正在使用Globals.h和Globals.m类来解决这个问题。我在Globals中创建一个BOOL并在Test1中启用该BOOL值,并在Test3中检查了BOOL值并执行我想要的方法。

这只是一个例子。我有很多视图控制器和许多应用程序的行为。所以我在Globals中创建了很多BOOL并在不同的类中使用它们。因此,在一个应用程序中处理大量bool是一种痛苦,而且也不是很好。那么任何人都可以帮助我如何克服这个问题。

提前致谢:)

3 个答案:

答案 0 :(得分:1)

您还可以使用 NSObject 方法isKindOfClass检查课程。

您还可以找到该方法解释中给出的示例。

在这里你可以比较对象是哪种类,并相应地你可以执行你的操作。

为此,您每次都可以将 自我 引用传递给Controller3,并且可以使用 id 存储它类型。

希望这会对您的代码有所帮助。

答案 1 :(得分:1)

尝试使用导航控制器的viewControllers属性。

UINavigationController reference

我的意思是,当视图控制器加载时,您需要根据它来自何处完成特定操作,抓取视图控制器数组并查看位置n - 2处的对象(其中n是元素的数量)数组)。然后使用isKindOfClass方法测试该对象的类类型,并执行相应的操作。

粗略示例:

- (void)viewDidLoad {

 [super viewDidLoad];

 NSArray *viewControllers = [[self navigationController] viewControllers];

 int parentIndex = [viewControllers count] - 2;
 UIViewController *parentVc = [viewControllers objectAtIndex:parentIndex];

 if ([parentVc isKindOfClass:ClassA.class]) {
  //action
 }
 else if ([parentVc isKindOfClass:ClassB.class]) {
  //different action
 }
 else ... etc

}

答案 2 :(得分:1)

像@mrunal一样,你可以使用isKindOfClass。我只想通过一些代码。

// self is Test3

if ([self.presentingViewController isKindOfClass:[Test1ViewController class]]) {
    // Run your method for Test1 - Test 3 here.
}

如果您正在推送或呈现模态,则需要获取实际的viewController,因为presentViewController将是一个UINavigationController。我就是这样做的。

// self is Test3

if ([self.presentingViewController.childViewControllers.lastObject isKindOfClass:[Test1ViewController class]]) {
    // Run your method for Test1 - Test 3 here.
}