स्टोरीबोर्ड का उपयोग करके प्रारंभिक दृश्य नियंत्रक को प्रोग्रामेटिक रूप से सेट करें


252

मैं InitialViewControllerस्टोरीबोर्ड के लिए प्रोग्रामेटिक रूप से कैसे सेट करूं? मैं अपने स्टोरीबोर्ड को कुछ स्थिति के आधार पर एक अलग दृश्य में खोलना चाहता हूं जो लॉन्च से लॉन्च तक भिन्न हो सकता है।


1
सेटिंग्स में मुख्य स्टोरीबोर्ड को साफ़ किए बिना, बिना चेतावनी के इस उत्तर को जांचें ।
बोरझ

जवाबों:


466

डमी प्रारंभिक दृश्य नियंत्रक के बिना कैसे

सुनिश्चित करें कि सभी प्रारंभिक दृश्य नियंत्रकों के पास एक स्टोरीबोर्ड आईडी है।

स्टोरीबोर्ड में, पहले दृश्य नियंत्रक से "प्रारंभिक दृश्य नियंत्रक" विशेषता को अनचेक करें।

यदि आप इस बिंदु पर अपना ऐप चलाते हैं तो आप पढ़ेंगे:

Failed to instantiate the default view controller for UIMainStoryboardFile 'MainStoryboard' - perhaps the designated entry point is not set?

और आप देखेंगे कि ऐप प्रतिनिधि में आपकी विंडो प्रॉपर्टी अब शून्य है।

ऐप की सेटिंग में, अपने लक्ष्य और Infoटैब पर जाएं। का मूल्य स्पष्ट किया Main storyboard file base name। पर Generalटैब, के लिए मान साफ़Main Interface । यह चेतावनी को हटा देगा।

एप्लिकेशन प्रतिनिधि की application:didFinishLaunchingWithOptions:विधि में विंडो और वांछित प्रारंभिक दृश्य नियंत्रक बनाएं :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

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

    UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

7
प्रेम! प्रेम! प्रेम! मैं इसका उपयोग IOS6 और IOS7 के लिए दो पूरी तरह से अलग-अलग दृश्य नियंत्रक पेड़ों के बीच स्विच करने के लिए करूंगा। IOS7 में सभी घंटियाँ और सीटी का उपयोग करते हुए, पीछे की ओर की संगति को संभालने का सबसे अच्छा तरीका लगता है।
हंकपापा

6
मैं स्विफ्ट में iOS प्रोग्रामिंग सीख रहा हूं। क्या कोई मेरी मदद कर सकता है कि कैसे उपरोक्त कोड को तेज़ी से लिखूँ। कृपया मदद कीजिए। धन्यवाद।
राघवेंद्र

1
@bdv didFinishLaunchingWithOptionsउस समय कहा जाता है जब एप्लिकेशन को एक नई प्रक्रिया में शुरू किया जाता है। यदि आप होम स्क्रीन पर जाते हैं और ऐप पर लौटते हैं, तो यह विधि फिर से लागू नहीं होगी। (जब तक iOS मेमोरी की कमी के कारण समाप्त नहीं हो जाता है।) ऐप को रोकने की कोशिश करें और अपने आईडीई से एक बार फिर लॉन्च करें। यदि समस्या जारी रहती है, तो एसओ को समस्या पोस्ट करें और मुझे मदद करने में खुशी होगी, दोस्त।
ट्रैविस

2
@peyman मेरी जांच के अनुसार मुख्य स्टोरीबोर्ड का संदर्भ हटाए जाने के बाद विंडो मौजूद नहीं है। मैंने अपने वर्तमान प्रोजेक्ट में विंडो इंस्टेंटेशन पर टिप्पणी की और पाया कि यह अभी भी मामला है।
ट्रैविस

2
@ राघव, यहाँ का स्विफ्ट कोड है:self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var storyboard = UIStoryboard(name: "Main", bundle: nil) var viewController: UIViewController = // self.window!.rootViewController = viewController self.window!.makeKeyAndVisible()
mjmayank

121

सभी के लिए स्विफ्ट प्रेमियों के लिए, यहाँ स्विफ्ट में अनुवादित @Travis द्वारा उत्तर दिया गया है :

क्या करें @Travis ने उद्देश्य C कोड से पहले समझाया। फिर,

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

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    var exampleViewController: ExampleViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ExampleController") as! ExampleViewController

    self.window?.rootViewController = exampleViewController

    self.window?.makeKeyAndVisible()

    return true
}

ExampleViewControllerनई प्रारंभिक दृश्य नियंत्रक आप दिखाना चाहते हैं होगा।

समझाया गया कदम:

  1. वर्तमान विंडो के आकार के साथ एक नई विंडो बनाएं और इसे हमारी मुख्य विंडो के रूप में सेट करें
  2. एक स्टोरीबोर्ड को त्वरित करें जिसका उपयोग हम अपने नए प्रारंभिक दृश्य नियंत्रक को बनाने के लिए कर सकते हैं
  3. यह स्टोरीबोर्ड आईडी के आधार पर हमारे नए प्रारंभिक दृश्य नियंत्रक को त्वरित करें
  4. हमारे नए विंडो के रूट व्यू कंट्रोलर को हमारे नए कंट्रोलर के रूप में सेट करें जिसे हमने अभी शुरू किया है
  5. हमारी नई खिड़की दिखाई दे

आनंद लें और खुश प्रोग्रामिंग!


मैं इस संस्करण के लिए @Travis पूछ रहा था, और फिर ...। फिर भी धन्यवाद।
dellos

स्टोरीबोर्ड आईडी आइडेंटिटी इंस्पेक्टर पेन में आइडेंटिटी सेक्शन के तहत है
डोमिनिक

2
स्टोरीबोर्ड आईडी की आवश्यकता नहीं होने के लिए एक टिप स्टोरीबोर्ड में स्पष्ट रूप से प्रारंभिक दृश्य नियंत्रक (rootViewController) सेट करने के लिए है, और UIStoryboard.instantiateViewControllerWithIdentifier () के ऊपर नियंत्रक के बजाय नियंत्रक प्राप्त करने के लिए इंस्टेंस विधि UIStoryboard.instantiateInitialViewController () का उपयोग करें। बाकी वही है।
एरिक बाउमेंडिल

45

आप प्रोग्राम को मुख्य विंडो के rootViewController में सेट कर सकते हैं (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

उदाहरण के लिए:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (shouldShowAnotherViewControllerAsRoot) {
        UIStoryboard *storyboard = self.window.rootViewController.storyboard;
        UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"rootNavigationController"];
        self.window.rootViewController = rootViewController;
        [self.window makeKeyAndVisible];
    }

    return YES;
}

फिर द्वितीयक UIViewController से मूल प्रविष्टि कैसे शुरू करें?
ooxio

@ योक्सियो: आप मूल प्रविष्टि को वैश्विक स्थान पर संग्रहीत कर सकते हैं, फिर बाद में इसका उपयोग कर सकते हैं।
चेंगजिओनग

यह वास्तव में उपयोगी है यदि आप लॉगिन / रजिस्टर या ऐसा कुछ करने के लिए त्वरित करना चाहते हैं ...
Honey

यह ऊपर @ ट्रेविस के उत्तर की तुलना में बहुत अधिक सीधा है क्योंकि आपको आईबी में एक लाख परियोजना सेटिंग्स और छेड़छाड़ के साथ गड़बड़ करने की आवश्यकता नहीं है। यदि आपका कोई दृश्य नियंत्रक तकनीकी रूप से डिफ़ॉल्ट प्रारंभिक कुलपति है, तो आपको कौन परवाह करता है और फिर आप प्रोग्रामेटिक रूप से किसी दूसरे को डायवर्ट करते हैं?
डैनी

ध्यान दें कि प्रतिस्थापित, स्टोरीबोर्ड द्वारा निर्दिष्ट प्रारंभिक व्यू कंट्रोलर अभी भी त्वरित हो जाएगा और init()/ deinit()चक्र से गुजर जाएगा , लेकिन निष्पादित viewDidLoad()या ठीक से प्रारंभ किए बिना IBOutlet-s। सुनिश्चित करें कि आप कोड इसके लिए तैयार हैं।
गैरी

14

स्विफ्ट 3: @ विजेता-सिग्लर कोड में अपडेट करें

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)

    // Assuming your storyboard is named "Main"
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    // Add code here (e.g. if/else) to determine which view controller class (chooseViewControllerA or chooseViewControllerB) and storyboard ID (chooseStoryboardA or chooseStoryboardB) to send the user to

    if(condition){
        let initialViewController: chooseViewControllerA = mainStoryboard.instantiateViewController(withIdentifier: "chooseStoryboardA") as! chooseViewControllerA
        self.window?.rootViewController = initialViewController
    )
    }else{
        let initialViewController: chooseViewControllerB = mainStoryboard.instantiateViewController(withIdentifier: "chooseStoryboardB") as! chooseViewControllerB
        self.window?.rootViewController = initialViewController
    )

    self.window?.makeKeyAndVisible(

    return true
}

धन्यवाद, @MEK। इसके अलावा, आप ब्रेसिज़ के साथ अनुगामी कोष्ठकों को प्रतिस्थापित करके सशर्त समापन बयानों के वाक्यविन्यास को सही करना चाह सकते हैं।
Native_Mobile_Arch_Dev

9

आप एक मुख्य दृश्य नियंत्रक के रूप में नेविगेशन रूटव्यूकंट्रोलर सेट कर सकते हैं। यह विचार आवेदन की आवश्यकता के अनुसार ऑटो लॉगिन के लिए उपयोग कर सकता है।

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

UIViewController viewController = (HomeController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"HomeController"];

UINavigationController navController = [[UINavigationController alloc] initWithRootViewController:viewController];

 self.window.rootViewController = navController;

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {

    // do stuff for iOS 7 and newer

    navController.navigationBar.barTintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];

    navController.navigationItem.leftBarButtonItem.tintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];

    navController.navigationBar.tintColor = [UIColor whiteColor];

    navController.navigationItem.titleView.tintColor = [UIColor whiteColor];

    NSDictionary *titleAttributes =@{

                                     NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],

                                     NSForegroundColorAttributeName : [UIColor whiteColor]

                                     };

    navController.navigationBar.titleTextAttributes = titleAttributes;

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

}

else {

    // do stuff for older versions than iOS 7

    navController.navigationBar.tintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];



    navController.navigationItem.titleView.tintColor = [UIColor whiteColor];

}

[self.window makeKeyAndVisible];

StoryboardSegue उपयोगकर्ताओं के लिए

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

// Go to Login Screen of story board with Identifier name : LoginViewController_Identifier

LoginViewController *loginViewController = (LoginViewController*)[mainStoryboard instantiateViewControllerWithIdentifier:@“LoginViewController_Identifier”];

navigationController = [[UINavigationController alloc] initWithRootViewController:testViewController];

self.window.rootViewController = navigationController;

[self.window makeKeyAndVisible];

// Go To Main screen if you are already Logged In Just check your saving credential here

if([SavedpreferenceForLogin] > 0){
    [loginViewController performSegueWithIdentifier:@"mainview_action" sender:nil];
}

धन्यवाद


6

मेनस्टोरीबोर्ड खोलें, वह दृश्य चुनें जिसे आप पहले शुरू करना चाहते हैं, फिर उपयोगिताएँ खोलें -> विशेषताएँ। "व्यू कंट्रोलर" के नीचे आपको "इनिशियल व्यू कंट्रोलर" रेडियो बटन दिखाई देता है। बस इसे चुनें।

--- संशोधित प्रश्न:

हो सकता है आप यह कोशिश कर सकते हैं: अपने inital view के ViewDidLoad अनुभाग में एक विधि लिखें और जब विधि अनुप्रयोग लॉन्च पर चलती है, तो विधि किसी अन्य दृश्य के लिए एक तर्क को ट्रिगर करती है।


मैंने ViewDidLoad में विधि लिखी लेकिन यह काम नहीं किया और जब मैंने इसे viewdidAppear में राइट किया तो यह काम कर रहा है, क्या आप बता सकते हैं कि ऐसा क्यों हो रहा है।
उपयोगकर्तादेव

हो सकता है कि आपको यह प्रयास करना चाहिए: appDelegate.m फ़ाइल में उपयुक्त विधियों में से किसी एक में अपनी शर्तों के अनुसार एक सेग कोड जोड़ें। उदाहरण के लिए, आप "applicationDidBecomeActive:" विधि के लिए एक सेग कोड जोड़ सकते हैं।
m.etka

@ जगदेव आप इसे ViewDidAppad के बजाय ViewDidAppear में लिखें।
उमैर खान जादौन

इस दृष्टिकोण के साथ समस्या यह है कि प्रारंभिक दृश्य नियंत्रक कुछ समय के लिए दिखाई देता है और फिर अन्य पर स्विच करता है जो यूएक्स दृष्टिकोण से अच्छा नहीं है इसलिए अच्छा समाधान नहीं है।
dharankar विशाल

3

स्विफ्ट 5

यदि आपके पास स्टोरीबोर्ड में प्रारंभिक ViewController के रूप में एक ViewController सेट नहीं है, तो आपको 2 चीजें करने की आवश्यकता है:

  1. अपनी परियोजना के लक्ष्य पर जाएं, अपनी परियोजना चुनें -> सामान्य -> ​​मुख्य इंटरफ़ेस फ़ील्ड को साफ़ करें।
  2. हमेशा प्रोजेक्ट TARGETS के अंदर, अब Info -> Application Scene Manifest -> Scene कॉन्फ़िगरेशन -> Application Session Role -> Item0 (डिफ़ॉल्ट कॉन्फ़िगरेशन) -> पर जाएं स्टोरीबोर्ड नाम फ़ील्ड हटाएं।

अंत में, अब आप अपना कोड SceneDelegate में जोड़ सकते हैं:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(windowScene: windowScene)


    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    // Make sure you set an Storyboard ID for the view controller you want to instantiate
    window?.rootViewController = storyboard.instantiateViewController(withIdentifier: identifier)
    window?.makeKeyAndVisible()

}

यह निश्चित रूप से Xcode 11.5 के रूप में सबसे वर्तमान उत्तर है, और Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not setकोड में अपने शुरुआती कुलपति को तत्काल हटाने का फैसला करने के बाद मेरे पास होने वाली चेतावनी को वास्तव में निर्धारित किया गया था। एक महत्वपूर्ण बिंदु, जब @ rs7 कहता है "स्टोरीबोर्ड नाम फ़ील्ड हटाएं", उनका मतलब है कि मैदान की पूरी पंक्ति, न कि केवल फ़ील्ड की सामग्री।
cdf1982

2

मुझे नहीं लगता कि यह संभव है। इसके बजाय आपके पास एक प्रारंभिक नियंत्रक हो सकता है जिसमें अलग-अलग दृश्य नियंत्रकों के लिए तर्क होंगे। स्टार्टअप पर, आप तय कर सकते हैं कि कौन सा प्रोग्राम प्रोग्राम करने के लिए है।


2

आप initial view controllerइंटरफ़ेस बिल्डर के साथ-साथ प्रोग्रामेटिक रूप से सेट कर सकते हैं ।

नीचे कार्यक्रम के लिए दृष्टिकोण का उपयोग किया जाता है।

उद्देश्य सी :

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

स्विफ्ट:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true

2

मैंने गतिशील नेविगेशन को संभालने और AppDelegate वर्ग को साफ रखने के लिए एक रूटिंग क्लास बनाया, मुझे उम्मीद है कि यह अन्य को भी मदद करेगा।

//
//  Routing.swift
// 
//
//  Created by Varun Naharia on 02/02/17.
//  Copyright © 2017 TechNaharia. All rights reserved.
//

import Foundation
import UIKit
import CoreLocation

class Routing {

    class func decideInitialViewController(window:UIWindow){
        let userDefaults = UserDefaults.standard
        if((Routing.getUserDefault("isFirstRun")) == nil)
        {
            Routing.setAnimatedAsInitialViewContoller(window: window)
        }
        else if((userDefaults.object(forKey: "User")) != nil)
        {
            Routing.setHomeAsInitialViewContoller(window: window)
        }
        else
        {
            Routing.setLoginAsInitialViewContoller(window: window)
        }

    }

    class func setAnimatedAsInitialViewContoller(window:UIWindow) {
        Routing.setUserDefault("Yes", KeyToSave: "isFirstRun")
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let animatedViewController: AnimatedViewController = mainStoryboard.instantiateViewController(withIdentifier: "AnimatedViewController") as! AnimatedViewController

        window.rootViewController = animatedViewController
        window.makeKeyAndVisible()
    }

    class func setHomeAsInitialViewContoller(window:UIWindow) {
        let userDefaults = UserDefaults.standard
        let decoded  = userDefaults.object(forKey: "User") as! Data
        User.currentUser = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! User

        if(User.currentUser.userId != nil && User.currentUser.userId != "")
        {
            let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let homeViewController: HomeViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
            let loginViewController: UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "LoginNavigationViewController") as! UINavigationController
            loginViewController.viewControllers.append(homeViewController)
            window.rootViewController = loginViewController
        }
        window.makeKeyAndVisible()
    }

    class func setLoginAsInitialViewContoller(window:UIWindow) {
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let loginViewController: UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "LoginNavigationViewController") as! UINavigationController

        window.rootViewController = loginViewController
        window.makeKeyAndVisible()
    }

  class func setUserDefault(_ ObjectToSave : Any?  , KeyToSave : String)
    {
        let defaults = UserDefaults.standard

        if (ObjectToSave != nil)
        {

            defaults.set(ObjectToSave, forKey: KeyToSave)
        }

        UserDefaults.standard.synchronize()
    }

    class func getUserDefault(_ KeyToReturnValye : String) -> Any?
    {
        let defaults = UserDefaults.standard

        if let name = defaults.value(forKey: KeyToReturnValye)
        {
            return name as Any
        }
        return nil
    }

    class func removetUserDefault(_ KeyToRemove : String)
    {
        let defaults = UserDefaults.standard
        defaults.removeObject(forKey: KeyToRemove)
        UserDefaults.standard.synchronize()
    }

}

और अपने AppDelegate में इसे कॉल करें

 self.window = UIWindow(frame: UIScreen.main.bounds)
 Routing.decideInitialViewController(window: self.window!)

2

बल कास्टिंग से बचने के साथ स्विफ्ट 3 और स्विफ्ट 4 का उपयोग करने के साथ एक अन्य समाधान इस तरह है

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController") as? YourViewController else {
        return false
    }
    self.window?.rootViewController = viewController
    self.window?.makeKeyAndVisible()
    return true
}

और नीचे के साथ उपयोग कर रहा है UINavigationController

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController") as? YourViewController else {
        return false
    }
    let navigationController = UINavigationController(rootViewController: viewController)
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()
    return true
}

2

में AppDelegate.swiftआप निम्नलिखित कोड जोड़ सकते हैं:

let sb = UIStoryboard(name: "Main", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "YourViewController_StorboardID")
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()

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

इसके अलावा, एक पहचान जोड़ने के लिए मत भूलना (स्टोरीबोर्ड का चयन करें -> नियंत्रक दृश्य -> ​​पहचान निरीक्षक दिखाएं -> StorboardID असाइन करें)।


1

IOS 13 और दृश्य प्रतिनिधि के लिए अद्यतन किए गए उत्तर:

अपनी जानकारी में सुनिश्चित करें। आप जिस फ़ाइल में जाते हैं, वह फ़ाइल दृश्य मैनिफ़ेस्ट -> दृश्य कॉन्फ़िगरेशन -> एप्लिकेशन सत्र भूमिका -> आइटम 0 में जाते हैं और वहाँ के मुख्य स्टोरीबोर्ड के संदर्भ को हटा दें। अन्यथा आपको स्टोरीबोर्ड से तुरंत विफल होने के बारे में एक ही चेतावनी मिलेगी।

इसके अलावा, एप्लिकेशन प्रतिनिधि से दृश्य प्रतिनिधि विधि दृश्य (_: willConnectTo: विकल्प :) के लिए कोड को स्थानांतरित करें, क्योंकि यह वह जगह है जहां जीवन चक्र की घटनाओं को अब संभाला जाता है।


0

कुछ दिनों पहले मैंने उसी स्थिति का सामना किया है। एक बहुत ही सरल ट्रिक ने इस समस्या को हल कर दिया। मैंने लॉन्च 2 से पहले अपने प्रारंभिक दृश्य नियंत्रक को छिपा दिया। यदि प्रारंभिक दृश्य नियंत्रक सही नियंत्रक है, तो यह दृश्यदर्शी में दिखाई देता है। एल्स, एक सीग वांछित दृश्य नियंत्रक के लिए किया जाता है। यह पूरी तरह से iOS 6.1 और इसके बाद के संस्करण में काम करता है। मुझे यकीन है कि यह iOS के पुराने संस्करणों पर काम करता है।


0

धन्यवाद इस रूप में संशोधित AppDelegate में इस प्रकार है:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) ->     Bool {
//Some code to check value of pins

if pins! == "Verified"{
        print(pins)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "HomePage", bundle: nil)
        let exampleViewController: UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("SBHP") as! UINavigationController

        self.window?.rootViewController = exampleViewController

        self.window?.makeKeyAndVisible()
    }else{
        print(pins)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let exampleViewController: UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("SBUser") as! UINavigationController

        self.window?.rootViewController = exampleViewController

        self.window?.makeKeyAndVisible()
    }

0

सरल समाधान मिला - स्टोरीबोर्ड और संपादन परियोजना जानकारी टैब से "प्रारंभिक दृश्य नियंत्रक जांच" को हटाने की आवश्यकता नहीं है makeKeyAndVisible, बस जगह

self.window.rootViewController = rootVC;

में

- (BOOL) application:didFinishLaunchingWithOptions:

लेकिन आप अभी भी , सही rootVCसे प्राप्त करते हैं instantiateViewControllerWithIdentifier?
थोमर्स

0
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "storyBoardid") as! ViewController
let navigationController = UINavigationController(rootViewController: vc)
UIApplication.shared.delegate.window?.rootViewController = navigationController

दूसरा तरीका यह है कि दृश्यदर्शी को प्रस्तुत करें,

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "storyBoardid") as! ViewController
self.present(vc,animated:true,completion:nil)

सबसे पहले आपको अपने स्टोरीबोर्ड का ऑब्जेक्ट बनाने की आवश्यकता है फिर रूट बदलें (यदि आवश्यक हो) तो आप विशेष दृश्य नियंत्रक का संदर्भ लेते हैं जिसे वर्तमान दृश्य नियंत्रक (यदि आप रूट बदलते हैं) को धक्का दिया जाता है, तो यह सिर्फ नया दृश्य नियंत्रक है जो आप हो सकता है


@VD पुरोहित, क्या आप अधिक समझ के लिए अपने उत्तर के बारे में अधिक वर्णन कर सकते हैं।
प्रग्स

0

स्विफ्ट 4, एक्सकोड 9

फ़ाइल में AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let firstVC = storyboard.instantiateViewController(withIdentifier: "firstViewController") as! firstViewController
    self.window?.rootViewController = firstVC
}

0
 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        if (PreferenceHelper.getAccessToken() != "") {
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "your View Controller Identifier")
            self.window?.rootViewController = initialViewController
        } else {
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "your View Controller identifier")
            self.window?.rootViewController = initialViewController
        }
        self.window?.makeKeyAndVisible()
        return true
    }

/*
use your view Controller identifier must use it doubles quotes**strong text**

nsuser पर जाँच डिफ़ॉल्ट मान वरीयताओं का मान पूरी तरह से संग्रहीत और गहन देखने की स्थिति पर जाँच नियंत्रक समस्या
चार्ट

0

इस सरल कोड द्वारा स्विफ्ट 5 या उससे ऊपर # मार्ग दृश्य नियंत्रक बनाएं। यदि आप var window: UIWindow?AppDelegate में xcode 11 या पहले इनिशियल का उपयोग कर रहे हैं

let rootVC = mainStoryboard.instantiateViewController(withIdentifier: "YOURCONTROLLER") as! YOURCONTROLLER

        navigationController.setNavigationBarHidden(true, animated: true)
        UIApplication.shared.windows.first?.rootViewController = UINavigationController.init(rootViewController: rootVC)
        UIApplication.shared.windows.first?.makeKeyAndVisible()

0

यदि आप एप्लीकेशनडीडिफिन को बदलना पसंद नहीं करते हैं, तो आप निम्न चाल कर सकते हैं:

एक प्रारंभिक दृश्य नियंत्रक के रूप में नेविगेशन नियंत्रक सेट करें और इसे एक कस्टम वर्ग 'MyNavigationController' असाइन करें। फिर आप viewDidLoad के दौरान इसके रूट व्यू कंट्रोलर को ट्वीक कर सकते हैं - यह रूट व्यू कंट्रोलर को ओवरराइड करेगा जिसे आपने अपने स्टोरीबोर्ड में सेट किया है।

class MyNavigationController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if !isLoggedIn() {
            viewControllers = [R.storyboard.authentication.loginView()!]
        }
    }

    private func isLoggedIn() -> Bool {
        return false
    }

}

-3

उस दृश्य नियंत्रक का चयन करें जिसे आप पहले खोलना चाहते हैं और विशेषता निरीक्षक के पास जाना चाहते हैं। प्रारंभिक दृश्य पर जाएं और चेक प्रारंभिक दृश्य नियंत्रक विकल्प है।

अब यह आपका प्रारंभिक दृश्य नियंत्रक होगा जो एप्लिकेशन लॉन्च के पहले खुल जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.