2012-11-29 4 views
11

में UIViewController क्लास नाम प्राप्त करें मैं देख रहा हूं नेविगेशन पर नियंत्रक नियंत्रक इस प्रकार है। अब मुझे यह जांचने की ज़रूरत है कि शीर्ष पर नियंत्रक ज्ञात वीसी में से एक है या नहीं। इसकी तुलना करने के लिए वीसी कक्षा का नाम कैसे प्राप्त करें? धन्यवाद।आईओएस

NSArray *viewContrlls=[[self navController] viewControllers]; 
[viewContrlls lastObject] 

कुछ की तरह,

if ([[viewContrlls lastObject] name] isEqualToString @"viewControllerName"){ 

उत्तर

30

इस का प्रयोग करें यह मदद कर सकते हैं कि आप

NSString *CurrentSelectedCViewController = NSStringFromClass([[((UINavigationController *)viewController1) visibleViewController] class]); 
+0

हे, काम! महान, वास्तव में आभारी! – Jaume

4
if ([NSStringFromClass([[viewContrlls lastObject] class]) isEqualToString: @"Whatever"]){ 
} 

तुम भी -isKindOfClass इस्तेमाल कर सकते हैं अगर आप एक विशिष्ट वर्ग के लिए सीधे एक उदाहरण तुलना करने के लिए पसंद करते हैं ।

14

सबसे आम तकनीक -isKindOfClass उपयोग करने के लिए है:

if ([[viewContrells lastObject] isKindOfClass:MyViewController.class]]) { 
    // ... 
} 

तार की तुलना करने के NSStringFromClass का उपयोग करना एक बहुत अच्छा समाधान है क्योंकि आपके कोड यदि आप दृश्य नियंत्रक refactor यह नाम बदलने के लिए टूट जाएगा नहीं है।

-1

स्विफ्ट संस्करण:

static func getClassNameAsString(className: AnyObject) -> String { 
    return _stdlib_getDemangledTypeName(className).componentsSeparatedByString(".").last! 
} 
+0

अनसुलझा पहचानकर्ता _stdlib_getDemangledTypeName। मुझे लगता है कि आपको यह भी बताना होगा कि हमें कौन सी लाइब्रेरी आयात करना है। – Integer