2012-05-21 71 views
0

我有一個應用程序處理大量的功能,也有很多的導航。檢測視圖控制器

我在我的應用程序中使用了很多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,並在不同的類中使用它們。所以在一個應用程序中處理大量的布爾是一件痛苦的事情,它也不好。那麼,任何人都可以幫助我解決這個問題。

感謝提前:)

回答

1

您還可以檢查類NSObject的方法isKindOfClass

您還可以找到該方法解釋中給出的示例。

在這裏您可以比較對象是哪種類的,因此您可以執行您的操作。

對於您可以將您的參考Controller3每次和你可以用ID類型存儲。

希望這會幫助你在你的代碼。

+0

感謝球員...很大的幫助... –

+0

隨時歡迎..很樂意幫助你... – Mrunal

1

嘗試使用導航控制器的viewControllers屬性。

UINavigationController reference

我的意思是,當基於它從搶視圖控制器陣列來了,看物體的位置,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 

}

+0

謝謝你們......很大的幫助......所有的答案都對我非常有幫助..但mrunal是第一個給出答案的人。所以我打勾。但老實說,所有的答案真的真的很有幫助謝謝:) –

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. 
} 
+1

謝謝你們......很好的幫助......所有的答案對我來說真的很有幫助..但是mrunal是第一個給出答案的人..所以我會選中它。但老實說,所有的答案真的很有幫助謝謝:) –

+0

是的,他應得的:)高興我們都可以幫助。 –

+0

嘿夥計...我有一個問題...如果我需要訪問Test1ViewController中的方法怎麼辦?在這裏它檢查整個類不是一個特定的方法:) ..可能是一個愚蠢的問題要問..但我只是在我的腦海 –