我有一个应用程序,它处理许多功能并且还有很多导航。
我在我的应用程序中使用了很多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是一种痛苦,而且也不是很好。那么任何人都可以帮助我如何克服这个问题。
提前致谢:)
答案 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.
}