2011-11-06 8 views
11

से पहला दृश्य नियंत्रक प्राप्त करें मेरे पास एक प्रोटोकॉल है जो मेरे एप्लिकेशनडिलेट लागू करता है। मैं इसे एक कहानी बोर्ड में परिभाषित पहले दृश्य नियंत्रक को पास करना चाहता हूं। मैं विधि से इसका उपयोग कैसे प्राप्त करूं?UIStoryBoard एप्लिकेशन डिलीगेट

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

उत्तर

21

मैं अगर मैं सवाल समझ रहा हूँ यकीन नहीं है सही ढंग से मुझे लगता है कि आप कैसे आप एक स्टोरीबोर्ड में पहली ViewController मिलता है पूछ रहे हैं। इसे पाने के लिए,

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc =[storybord instantiateInitialViewController]; 

अपने नाम के अनुरूप स्टोरीबोर्ड का नाम बदलें, मेनस्टोरीबोर्ड केवल डिफ़ॉल्ट नाम है। आशा है कि आपको इसी की तलाश थी।

संपादित करें:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *vc =[storybord instantiateInitialViewController]; 
    //set the delegate on the view controller that you have loaded 
    // Override point for customization after application launch. 
    return YES; 
} 
+0

हाँ मुझे यही चाहिए। एक सार्वभौमिक ऐप (आईफोन बनाम आईपैड) में डिवाइस के लिए सही स्टोरीबोर्ड को लोड करने के बारे में कोई विचार? –

+0

यह 'UIViewController * vc करना चाहिए; यदि (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { UIStoryboard * storybord = [UIStoryboard storyboardWithName: @ "MainiPadStoryboard" बंडल: शून्य]; vc = [storybord instantiateInitialViewController]; } अन्य { UIStoryboard * storybord = [UIStoryboard storyboardWithName: @ "MainiPhoneStoryboard" बंडल: शून्य]; vc = [storybord instantiateInitialViewController]; } ' –

+11

बहुत यकीन है कि यह एक नई प्रतिलिपि पकड़ रहा है, मौजूदा नहीं। –

15

बल्कि फिर अपने मौजूदा स्टोरीबोर्ड की नई प्रतिलिपि बनाने

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

का उपयोग कर आप अपने अनुप्रयोग प्रतिनिधि के हेडर फाइल में इस संपत्ति

@property (nonatomic, weak) UIViewController* initialViewController; 

और में सेट कर सकते हैं यह विधि बस संपत्ति के लिए self.window.rootViewController असाइन करें

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.initialViewController = self.window.rootViewController; 

    return YES; 
} 

यह काम करना चाहिए, क्योंकि ऐप प्रतिनिधि प्रोटोकॉल की विंडो प्रॉपर्टी में rootViewConroller तक पहुंच है और स्टोरीबोर्ड का उपयोग करते हुए यह नियंत्रक प्रारंभिकव्यू कंट्रोलर है।

+0

यह काम करता है, और सही जवाब है; एक नया नियंत्रक को तत्काल करना स्टोरीबोर्ड से पहले से ही तत्काल एक को इंगित करने जैसा नहीं है। – Wizfinger

+0

हां, यह स्वीकार्य उत्तर होना चाहिए। – Martin

-1

स्विफ्ट 2.0 उन लोगों के लिए कार्यान्वयन जो चाहते थे।

आपको स्ट्रॉबार्ड और नियंत्रक दृश्य पहचान को संशोधित करना होगा। इसके अलावा ओ

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     let storyboard: UIStoryboard = UIStoryboard(name: "[STORYBOARD NAME]", bundle: nil) 
     let viewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("[CONTROLLER IDENTIFIER]") // You have replace UIViewController with you customer controll type 


     self.window?.rootViewController = viewController 
     self.window?.makeKeyAndVisible() 

     return true 
    } 
+0

स्वीकार्य उत्तर को त्वरित रूप से परिवर्तित करने की बजाय समस्या को समझने का प्रयास करें ... – Martin

+0

@ मार्टिन मैंने जवाब संपादित किया है।उम्मीद है कि एक आईओएस शुरुआती भी अब समझ सकता है। –

+0

लेकिन आपके समाधान एक नया दृश्य नियंत्रक बनाता है जबकि @aran मौजूदा पहले दृश्य नियंत्रक को प्राप्त करने के लिए समाधान की खोज कर रहा था। वर्तमान में स्वीकृत उत्तर एक अच्छा जवाब नहीं है। – Martin