0

我有一个应用程序,它处理很多功能,也有很多导航。

我在我的应用程序中使用了很多 BOOL。我知道它没有效率。所以我想删除这些 BOOL 来创建更高效​​、更干净的应用程序。

这是我的问题。例如,假设我有 3 个 UIViewController。

测试1,测试2,测试3

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

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

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

提前致谢 :)

4

3 回答 3

1

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

UINavigationController 参考

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

粗略的例子:

-(无效)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

}

于 2012-05-21T16:17:53.460 回答
1

就像@mrunal 说的你可以使用 isKindOfClass。只是想通了一些代码。

// self is Test3

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

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

// self is Test3

if ([self.presentingViewController.childViewControllers.lastObject isKindOfClass:[Test1ViewController class]]) {
    // Run your method for Test1 - Test 3 here.
}
于 2012-05-21T16:20:10.120 回答
1

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

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

在这里您可以比较对象是哪种类,并据此执行您的操作。

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

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

于 2012-05-21T16:12:38.390 回答