2013-10-11 8 views

उत्तर

21

यहाँ एक UIStoryboard श्रेणी करूँगा कि सिर्फ इस:

UIStoryboard + LDMain.h

#import <UIKit/UIKit.h> 

@interface UIStoryboard (LDMain) 

+ (instancetype)LDMainStoryboard; 

@end 

UIStoryboard + LDMain.m

#import "UIStoryboard+LDMain.h" 

UIStoryboard *_mainStoryboard = nil; 

@implementation UIStoryboard (LDMain) 

+ (instancetype)LDMainStoryboard { 
    if (!_mainStoryboard) { 
     NSBundle *bundle = [NSBundle mainBundle]; 
     NSString *storyboardName = [bundle objectForInfoDictionaryKey:@"UIMainStoryboardFile"]; 
     _mainStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:bundle]; 
    } 
    return _mainStoryboard; 
} 

@end 

यहाँ एक link to the gist

+1

फ्रेमवर्क वर्गों पर श्रेणियाँ हमेशा नाम टकराव से बचने के लिए उपसर्गों का उपयोग करना चाहिए। –

+0

धन्यवाद। मैंने बदलाव किए हैं। –

+1

कूल; हालांकि, विधि नाम वास्तव में अधिक महत्वपूर्ण हिस्सा हैं। –

12

है यदि स्टोरीबोर्ड पहले से नहीं है तो आप [UIStoryboard storyboardWithName:storyboardName bundle:bundle] का उपयोग कर सकते हैं लदा हुआ।

यदि यह है, तो यह एक नई प्रति लोड करेगा।

आप मौजूदा प्राप्त करने के लिए viewController.storyboard का भी उपयोग कर सकते हैं। यदि आपके आवेदन प्रतिनिधि (शायद आप करते हैं) के हिस्से के रूप में आपके पास mainWindow है, तो आप उसमें rootViewController.storyboard प्राप्त कर सकते हैं।

कुछ की तरह:

UIApplication *application = [UIApplication sharedApplication]; 
MyAppDelegate *myAppDelegate = ((MyAppDelegate *)application).delegate; 
return myAppDelegate.mainWindow.rootViewController.storyboard; 

यदि नहीं, तो यह आपके लिए काम कर सकते हैं:

UIApplication *application = [UIApplication sharedApplication]; 
UIWindow *backWindow = application.windows[0]; 
return backWindow.rootViewController.storyboard 
संबंधित मुद्दे