एप्लाइड में प्रारंभिक व्यू-कंट्रौलर सेट करें - स्विफ्ट


147

मैं appdelegate से प्रारंभिक दृश्यमैंसरोल सेट करना चाहूंगा। मुझे वास्तव में अच्छा उत्तर मिला, हालांकि यह उद्देश्य सी में है और समान रूप से एक ही चीज़ को प्राप्त करने में परेशानी हो रही है।

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

- (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;
}

किसी को भी मदद करने में सक्षम?

मैं चाहता हूं कि प्रारंभिक व्यूकंट्रोलर एक सशर्त विवरण का उपयोग करके पूरी की जाने वाली कुछ शर्तों पर निर्भर हो।


यह एक संभव डुप्लिकेट है: stackoverflow.com/questions/10428629/…
Honey

जवाबों:


279

मैंने इस धागे का उपयोग उद्देश्य सी को तेजी से बदलने में मदद करने के लिए किया था, और इसके पूरी तरह से काम कर रहा था।

त्वरित और वर्तमान में स्विफ्ट में एक दृश्य नियंत्रक

स्विफ्ट 2 कोड:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginSignupVC")

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

    return true
}

स्विफ्ट 3 कोड:

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

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginSignupVC")

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

    return true
}

1
स्टोरीबोर्ड को "मेन", और स्विफ्ट 2 ऐप में "स्टोरीबोर्ड.स्टोरीबोर्ड" नहीं मिल सकता है
Async-

5
क्या यह वर्तमान मानक तरीका है जो कि एपलीगेट में प्रारंभिक दृश्य नियंत्रक सेट करता है ? मैं पूछता हूं क्योंकि यह एक हैक की एक बिट बिट की तरह दिखता है (क्षमा करें @ एबीएस)।
कठोरता

10
@rigdonmr यदि अनुप्रयोग में मुख्य इंटरफ़ेस के रूप में एक स्टोरीबोर्ड सेट है, तो विंडो स्वचालित रूप से लोड होती है और इसका रूट व्यू कंट्रोलर स्टोरीबोर्ड के प्रारंभिक व्यू कंट्रोलर पर सेट होता है। यदि किसी स्थिति के आधार पर दृश्य नियंत्रक को बदलने की आवश्यकता है, या एप्लिकेशन में एक मुख्य इंटरफ़ेस नहीं है, तो यह ए को आरंभीकृत करने UIWindowऔर अपने रूट व्यू नियंत्रक को प्रोग्रामेटिक रूप से सेट करने के लिए स्वीकार्य है ।
JAL

2
यहाँ आश्चर्यजनक (लेकिन अच्छी) बात यह है कि आईओएस को इस तरह से मैन्युअल रूप से इंस्टेंट करना प्रकट होता है, जिससे आईओएस को डिफ़ॉल्ट व्यू कंट्रोलर को इंस्टेंटिमिट करने से रोका जा सकता है। मैंने उम्मीद की होगी कि दोनों लोडेड होंगे। क्या यह व्यवहार कहीं दस्तावेज है?
पैट नीमेयर

2
@MayankJain स्विफ्ट 3 के साथ काम करता है, बस पहले के कोड में से कुछ का अनुवाद करने की आवश्यकता है
JAB

42

इसे इस्तेमाल करे। उदाहरण के लिए: आपको UINavigationControllerप्रारंभिक दृश्य नियंत्रक के रूप में उपयोग करना चाहिए । फिर, आप स्टोरीबोर्ड से रूट के रूप में किसी भी दृश्य नियंत्रक को सेट कर सकते हैं।

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as UINavigationController
    let rootViewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("VC") as UIViewController
    navigationController.viewControllers = [rootViewController]
    self.window?.rootViewController = navigationController
    return true
}

मेरी स्टोरीबोर्ड स्क्रीन देखें


क्या आपने स्टोरीबोर्ड में कंट्रोलर व्यू के लिए स्टोरीबोर्ड आईडी सेट की है? देखें joxi.ru/l2ZYxZqS8JOomJ
protikhonoff

हां पहले से ही सेट है, मुझे लगता है कि यह सफलतापूर्वक व्यू कॉन्ट्रॉलर्स खोल रहा है, लेकिन यह इसे 'नहीं' दिखा रहा है। कोई विचार?
अबूबकर मौलिम

कोई त्रुटि नहीं, स्क्रीन लॉन्च के बाद, मुझे एक काला पृष्ठ मिलता है
अबुबकर मौलिम

मुझे लगता है मुझे समस्या मिल गई। आपको अपने स्टोरीबोर्ड में "इनिशियल व्यू कंट्रोलर" की जांच करनी चाहिए। joxi.ru/8AnNbQlhq3QOAO
protikhonoff

लेकिन मैं एक सशर्त बयान का उपयोग करके प्रारंभिक दृश्य-नियंत्रक को बदलना चाहता हूं।
अबुबकर मौलिम

24

स्विफ्ट 3 के लिए, स्विफ्ट 4:

स्टोरीबोर्ड से झटपट रूट व्यू कंट्रोलर:

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

        // In project directory storyboard looks like Main.storyboard,
        // you should use only part before ".storyboard" as it's name,
        // so in this example name is "Main".
        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)

        // controller identifier sets up in storyboard utilities
        // panel (on the right), it called Storyboard ID
        let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController

        self.window?.rootViewController = viewController
        self.window?.makeKeyAndVisible()        
        return true
    }

यदि आप UINavigationControllerमूल के रूप में उपयोग करना चाहते हैं :

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

        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController
        let navigationController = UINavigationController.init(rootViewController: viewController)
        self.window?.rootViewController = navigationController

        self.window?.makeKeyAndVisible()        
        return true
    }

Xib से तत्काल रूट दृश्य नियंत्रक:

यह लगभग समान है, लेकिन लाइनों के बजाय

let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController

आपको लिखना पड़ेगा

let viewController = YourViewController(nibName: "YourViewController", bundle: nil)

22

यदि आप स्टोरीबोर्ड का उपयोग नहीं कर रहे हैं, तो आप यह कोशिश कर सकते हैं

var window: UIWindow?
var initialViewController :UIViewController?

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

    initialViewController  = MainViewController(nibName:"MainViewController",bundle:nil)

    let frame = UIScreen.mainScreen().bounds
    window = UIWindow(frame: frame)

    window!.rootViewController = initialViewController
    window!.makeKeyAndVisible()

    return true
}

1
निब नाम क्या दर्शाता है?
अबुबकर मौलिम

@Abs nibName दृश्य को पलटने के लिए लोड किए जाने वाले नाम का नाम है।
रशि

ओरिएंटेशन ट्रांजिशन एनिमेशन इसके साथ काम करना बंद कर देते हैं।
user3427013

मैंने पहले ही इस
लोल को उखाड़

18

नए Xcode के लिए 11.xxx और Swift 5.xx, जहाँ यह लक्ष्य iOS 13+ पर सेट है।

नए प्रोजेक्ट संरचना के लिए, AppDelegate को rootViewController के संबंध में कुछ भी करने की आवश्यकता नहीं है।

विंडो (UIWindowScene) क्लास -> 'सीनडेलेगेट' फ़ाइल को संभालने के लिए एक नया वर्ग है।

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = // Your RootViewController in here
        self.window = window
        window.makeKeyAndVisible()
    }

}

1
बहुत आशंकित।
अजीम तालुकदार

14

यहां पहुंचने का एक अच्छा तरीका है। यह उदाहरण एक नेविगेशन कंट्रोलर को रूट व्यू कंट्रोलर के रूप में रखता है, और नेविगेशन स्टैक के निचले भाग में अपनी पसंद के व्यू कंट्रोलर को डालता है, जो भी आपको इसकी आवश्यकता है उसे पुश करने के लिए तैयार है।

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
    // mainStoryboard
    let mainStoryboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

    // rootViewController
    let rootViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainViewController") as? UIViewController

    // navigationController
    let navigationController = UINavigationController(rootViewController: rootViewController!)

    navigationController.navigationBarHidden = true // or not, your choice.

    // self.window
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    self.window!.rootViewController = navigationController

    self.window!.makeKeyAndVisible()
}

इस उदाहरण को काम करने के लिए आप "MainViewController" को स्टोरीबोर्ड आईडी के रूप में अपने मुख्य दृश्य नियंत्रक पर सेट करेंगे, और इस मामले में स्टोरीबोर्ड का फ़ाइल नाम "MainStoryboard.storyboard" होगा। मैं अपने स्टोरीबोर्ड को इस तरह से नाम देता हूं क्योंकि मेरे लिए Main.storyboard एक उचित नाम नहीं है, खासकर यदि आप कभी भी इसे उप-वर्ग में जाते हैं।


11

मैंने इसे उद्देश्य-ग पर किया था आशा है कि यह यू के लिए उपयोगी होगा

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

UIViewController *viewController;

NSUserDefaults *loginUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *check=[loginUserDefaults objectForKey:@"Checklog"];

if ([check isEqualToString:@"login"]) {

    viewController = [storyboard instantiateViewControllerWithIdentifier:@"SWRevealViewController"];
} else {

    viewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
}


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

आपने स्टोरीबोर्ड में View Controllers कैसे डिज़ाइन किया है। कृपया मदद करें।
पूनम

दृश्य नियंत्रकों को खींचें और पहचान की स्टोरीबोर्ड आईडी सेट करें: <ViewControllerName> और अपने दृश्य नियंत्रक तक पहुंचें ...
पटेल जिगर

@PatelJigar loginvc में कैसे सेट करें
उमा माधवी

इस UITabBarController * tbc = [self.storyboard InstantiateViewControllerWithIdentifier: @ "ContentViewController"] जैसे कॉल व्यू कंट्रोलर; [स्व presentViewController: tbc एनिमेटेड: हाँ पूरा: शून्य];
पटेल जिगर

7

स्विफ्ट 4.2 और 5 कोड के लिए कोड:

var window: UIWindow?


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

     let storyboard = UIStoryboard(name: "Main", bundle: nil)

     let initialViewController = storyboard.instantiateViewController(withIdentifier: "dashboardVC")

     self.window?.rootViewController = initialViewController
     self.window?.makeKeyAndVisible()
}

और इसके लिए Xcode 11+ and for Swift 5+:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

     var window: UIWindow?

     func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
         if let windowScene = scene as? UIWindowScene {
             let window = UIWindow(windowScene: windowScene)

              window.rootViewController = // Your RootViewController in here

              self.window = window
              window.makeKeyAndVisible()
         }
    }
}

self.window त्रुटि देता है प्रकार का मूल्य 'AppDelegate' का कोई सदस्य 'विंडो' नहीं है, कोई विचार?
जोसेफ अस्त्रहन

@JosephAstrahan ने इसे कॉल करने से पहले एक चर घोषित किया। जैसे - var window: UIWindow?
जमील हसनैन तमीम

@JosephAstrahan फिर से मेरे जवाब की जाँच करें। मैंने चर जोड़ा।
जमील हसनैन तमीम

धन्यवाद, कि एक टन में मदद करता है!
जोसेफ एस्ट्राहन

And for Xcode 11+ and for Swift 5+भाग मेरी बहुत मदद करता है। धन्यवाद आदमी
Torongo

6

मैंने Xcode 8 और स्विफ्ट 3.0 में किया था, आशा है कि यह यू के लिए उपयोगी होगा, और इसके पूरी तरह से काम करेगा। निम्नलिखित कोड का उपयोग करें:

var window: UIWindow?

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

और यदि आप नेविगेशन कंट्रोलर का उपयोग कर रहे हैं, तो उसके लिए निम्नलिखित कोड का उपयोग करें:

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as! UINavigationController
    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController")
    navigationController.viewControllers = [initialViewController]
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()      
    return true
}

हाय ... मयंक, मैंने Xcode 8 और स्विफ्ट 3.0 में किया था, इस समाधान का उपयोग करने के बाद कौन सी त्रुटि आती है क्योंकि यह काम कर रही है
कुणाल

6

स्विफ्ट 4:

AppFelegate.swift के अंदर इन पंक्तियों को जोड़ें, दिए गए फिशलिफ्टिंगविथऑक्शन () फ़ंक्शन के भीतर ...

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // Setting the Appropriate initialViewController

    // Set the window to the dimensions of the device
    self.window = UIWindow(frame: UIScreen.main.bounds)

    // Grab a reference to whichever storyboard you have the ViewController within
    let storyboard = UIStoryboard(name: "Name of Storyboard", bundle: nil)

    // Grab a reference to the ViewController you want to show 1st.
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "Name of ViewController")

    // Set that ViewController as the rootViewController
    self.window?.rootViewController = initialViewController

    // Sets our window up in front
    self.window?.makeKeyAndVisible()

    return true
}

अब, उदाहरण के लिए, कई बार हम कुछ ऐसा करते हैं, जब हम या तो उपयोगकर्ता को लॉगिन स्क्रीन पर या प्रारंभिक सेटअप स्क्रीनल या ऐप के मेनस्क्रीन पर वापस भेजना चाहते हैं, आदि। यदि आप भी ऐसा ही कुछ करना चाहते हैं। , आप इस बिंदु का उपयोग उस के लिए एक सड़क के रूप में कर सकते हैं।

इसके बारे में सोचो। आपके पास NSUserDefaults में संग्रहित मूल्य हो सकता है उदाहरण के लिए, जो उपयोगकर्ता के पास बौलियन औरif userLoggedIn == false { use this storyboard & initialViewController... } else { use this storyboard & initialViewController... }


यह 1 जोड़ा ViewController के साथ एक नई परियोजना में काम नहीं करता है। हमेशा प्रारंभिक दृश्य नियंत्रक से शुरू होता है। Xcode 11.2 कहां समस्या हो सकती है?
ओलेह एच

5

अच्छी तरह से ऊपर / नीचे सभी उत्तर स्टोरीबोर्ड में कोई प्रवेश बिंदु के बारे में चेतावनी का उत्पादन कर रहे हैं।

यदि आप 2 (या अधिक) प्रविष्टि दृश्य नियंत्रक चाहते हैं जो कुछ स्थिति पर निर्भर करते हैं ( शर्त को कहते हैं ) तो आप क्या कर सकते हैं:

  • अपने Main.storyboard में बिना UINavigationController बनाएं RootViewController के बनाएं, इसे प्रवेश बिंदु के रूप में सेट करें
  • 2 बनाएं (या अधिक) दृश्य नियंत्रकों में segues "दिखाएँ", उन्हें कुछ आईडी असाइन, कहते हैं कि ID1 और आईडी 2
  • अगले कोड का उपयोग करें:

    class AppDelegate: UIResponder, UIApplicationDelegate {
    
       var window: UIWindow?
    
       func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
           let navigationController = window!.rootViewController! as! UINavigationController
           navigationController.performSegueWithIdentifier(conditionVariable ? "id1" : "id2")
    
           return true
       }

उम्मीद है की यह मदद करेगा।


1
"स्टोरीबोर्ड में नो एंट्री पॉइंट" त्रुटि एक प्रोजेक्ट कॉन्फ़िगरेशन के कारण है जिसे हटाया जा सकता है। परियोजना> जानकारी> कस्टम iOS लक्ष्य गुणों पर जाएं और "मुख्य स्टोरीबोर्ड फ़ाइल आधार नाम" संपत्ति को हटा दें। चेतावनी अब प्रकट नहीं होनी चाहिए।
orangemako

5

यदि आप स्टोरीबोर्ड का उपयोग नहीं कर रहे हैं। आप अपने मुख्य दृश्य नियंत्रक को प्रोग्रामेटिक रूप से इनिशियलाइज़ कर सकते हैं।

स्विफ्ट 4

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let rootViewController = MainViewController()
    let navigationController = UINavigationController(rootViewController: rootViewController)
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()

    return true
}
class MainViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .green
    }
}

और तैनाती जानकारीMain से भी हटा दें ।

यहाँ छवि विवरण दर्ज करें


इसने मेरे साथ स्विफ्ट 4.2,
एक्सकोड

4

यहाँ स्विफ्ट 4 में पूरा समाधान है, इसे'FinishLaunchingWithOptions 'में लागू करें

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

 let isLogin = UserDefaults.standard.bool(forKey: "Islogin")
    if isLogin{
        self.NextViewController(storybordid: "OtherViewController")


    }else{
        self.NextViewController(storybordid: "LoginViewController")

    }
}

इस फ़ंक्शन को किसी भी जगह लिखें जहां Appdelegate.swift के अंदर

  func NextViewController(storybordid:String)
{

    let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let exampleVC = storyBoard.instantiateViewController(withIdentifier:storybordid )
   // self.present(exampleVC, animated: true)
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = exampleVC
    self.window?.makeKeyAndVisible()
}

3

बस मामले में आप इसे व्यू कंट्रोलर में करना चाहते हैं और ऐप डेलीगेट में नहीं: बस अपने व्यू कंट्रोलर में ऐपडेलगेट के संदर्भ को प्राप्त करें और इसे सही व्यू कंट्रोलर के साथ विंडो ऑब्जेक्ट को रीसेट करें क्योंकि यह रूटव्यूकंट्रोलर है।

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let yourVC = mainStoryboard.instantiateViewControllerWithIdentifier("YOUR_VC_IDENTIFIER") as! YourViewController
appDelegate.window?.rootViewController = yourVC
appDelegate.window?.makeKeyAndVisible()

3

के लिए तेजी से 4.0

अपने AppDelegate.swift फ़ाइल में didfinishedlaunchingWithOptions विधि में, निम्न कोड डालें।

var window: UIWindow?


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

    let rootVC = MainViewController() // your custom viewController. You can instantiate using nib too. UIViewController(nib name, bundle)
    //let rootVC = UIViewController(nibName: "MainViewController", bundle: nil) //or MainViewController()
    let navController = UINavigationController(rootViewController: rootVC) // Integrate navigation controller programmatically if you want

    window?.rootViewController = navController

    return true
}

उम्मीद है कि यह ठीक काम करेगा।


3
काम किया है। यदि आप स्ट्रीबोर्डबोर्ड में प्रारंभिक व्यू कॉन्ट्रोलर सेट करते हैं तो आपको विंडो = UIWindow (फ्रेम: UIScreen.main.bounds) जोड़ना होगा
Punit

3

स्विफ्ट 5 और Xcode 11

तो xCode 11 में विंडो समाधान appDelegate के अंदर मान्य नहीं है। वे इसे सीनेलगेट ले गए। आप इसे SceneDelgate.swift फ़ाइल में पा सकते हैं।

आप देखेंगे कि यह अब एक var window: UIWindow?वर्तमान है।

अपनी स्थिति में मैं एक स्टोरीबोर्ड से एक TabBarController का उपयोग कर रहा था और इसे rootViewController के रूप में सेट करना चाहता था।

यह मेरा कोड है:

sceneDelegate.swift

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).

        self.window = self.window ?? UIWindow()//@JA- If this scene's self.window is nil then set a new UIWindow object to it.

        //@Grab the storyboard and ensure that the tab bar controller is reinstantiated with the details below.
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarController") as! UITabBarController

        for child in tabBarController.viewControllers ?? [] {
            if let top = child as? StateControllerProtocol {
                print("State Controller Passed To:")
                print(child.title!)
                top.setState(state: stateController)
            }
        }

        self.window!.rootViewController = tabBarController //Set the rootViewController to our modified version with the StateController instances
        self.window!.makeKeyAndVisible()

        print("Finished scene setting code")
        guard let _ = (scene as? UIWindowScene) else { return }
    }

जैसा कि मैंने यहां किया था, इसे सही दृश्य विधि में जोड़ना सुनिश्चित करें। ध्यान दें कि आपको स्टोरीबोर्ड में उपयोग किए जा रहे tabBarController या viewController के लिए पहचानकर्ता नाम सेट करना होगा ।

स्टोरीबोर्ड आईडी कैसे सेट करें

मेरे मामले में मैं टैब दृश्य के बीच साझा चर का ट्रैक रखने के लिए एक स्टेटकंट्रोलर सेट करने के लिए ऐसा कर रहा था। यदि आप यही काम करना चाहते हैं तो निम्नलिखित कोड जोड़ें ...

StateController.swift

import Foundation

struct tdfvars{
    var rbe:Double = 1.4
    var t1half:Double = 1.5
    var alphaBetaLate:Double = 3.0
    var alphaBetaAcute:Double = 10.0
    var totalDose:Double = 6000.00
    var dosePerFraction:Double = 200.0
    var numOfFractions:Double = 30
    var totalTime:Double = 168
    var ldrDose:Double = 8500.0
}

//@JA - Protocol that view controllers should have that defines that it should have a function to setState
protocol StateControllerProtocol {
  func setState(state: StateController)
}

class StateController {
    var tdfvariables:tdfvars = tdfvars()
}

नोट: बस अपने स्वयं के चरों का उपयोग करें या जो भी आप इसके बजाय ट्रैक रखने की कोशिश कर रहे हैं, मैंने सिर्फ एक उदाहरण के रूप में tdfvitables संरचना में मेरा सूचीबद्ध किया है।

TabController के प्रत्येक दृश्य में निम्न सदस्य चर जोड़ें।

    class SettingsViewController: UIViewController {
    var stateController: StateController?
.... }

फिर उन्हीं फाइलों में निम्नलिखित जोड़ते हैं:

extension SettingsViewController: StateControllerProtocol {
  func setState(state: StateController) {
    self.stateController = state
  }
}

यह क्या करता है आप विचारों के बीच चर चर के लिए एकल दृष्टिकोण से बचने के लिए अनुमति देता है । यह निर्भरता इंजेक्शन मॉडल के लिए आसानी से अनुमति देता है जो कि लंबे समय तक बेहतर है फिर सिंगलटन दृष्टिकोण।


3

अक्षम Main.storyboard

General -> Deployment Info -> Main Interface -> remove `Main` 
Info.plist -> remove Key/Value for `UISceneStoryboardFile` and  `UIMainStoryboardFile`

स्टोरीबोर्ड आईडी जोड़ें

Main.storyboard -> Select View Controller -> Inspectors -> Identity inspector -> Storyboard ID -> e.g. customVCStoryboardId

स्विफ्ट 5 और एक्सकोड 11

बढ़ाएँ UIWindow

class CustomWindow : UIWindow {
    //...
}

Xcode द्वारा उत्पन्न संपादित करें SceneDelegate.swift

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: CustomWindow!

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let windowScene = (scene as? UIWindowScene) else { return }

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "customVCStoryboardId")

        window = CustomWindow(windowScene: windowScene)
        window.rootViewController = initialViewController
        window.makeKeyAndVisible()
    }

    //...
}

रूट कंट्रोलर को प्रारंभिक व्यू कंट्रोलर window.rootViewController = UIStoryboard (नाम: "मेन", बंडल: nil) .instantiateInitialViewController ()
कामरान खान

1
I worked out a solution on Xcode 6.4 in swift. 

// I saved the credentials on a click event to phone memory

    @IBAction func gotobidderpage(sender: AnyObject) {
 if (usernamestring == "bidder" && passwordstring == "day303")
        {
            rolltype = "1"

NSUserDefaults.standardUserDefaults().setObject(usernamestring, forKey: "username")
NSUserDefaults.standardUserDefaults().setObject(passwordstring, forKey: "password")
NSUserDefaults.standardUserDefaults().setObject(rolltype, forKey: "roll")


            self.performSegueWithIdentifier("seguetobidderpage", sender: self)
}


// Retained saved credentials in app delegate.swift and performed navigation after condition check


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

let usernamestring = NSUserDefaults.standardUserDefaults().stringForKey("username")
let passwordstring = NSUserDefaults.standardUserDefaults().stringForKey("password")
let rolltypestring = NSUserDefaults.standardUserDefaults().stringForKey("roll")

        if (usernamestring == "bidder" && passwordstring == "day303" && rolltypestring == "1")
        {

            // Access the storyboard and fetch an instance of the view controller
            var storyboard = UIStoryboard(name: "Main", bundle: nil)
            var viewController: BidderPage = storyboard.instantiateViewControllerWithIdentifier("bidderpageID") as! BidderPage

            // Then push that view controller onto the navigation stack
            var rootViewController = self.window!.rootViewController as! UINavigationController
            rootViewController.pushViewController(viewController, animated: true)
        }

        // Override point for customization after application launch.
        return true
    }



Hope it helps !

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

1

App प्रतिनिधि से SWRevealViewController के साथ एक दृश्य-केंद्र खोलें।

 self.window = UIWindow(frame: UIScreen.main.bounds)
 let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil)
 let swrevealviewcontroller:SWRevealViewController = storyboard.instantiateInitialViewController() as! SWRevealViewController 
 self.window?.rootViewController = swrevealviewcontroller
 self.window?.makeKeyAndVisible()

0

स्विफ्ट 5+ के लिए


var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            let submodules = (
                home: HomeRouter.createModule(),
                search: SearchRouter.createModule(),
                exoplanets: ExoplanetsRouter.createModule()
            )
            
            let tabBarController = TabBarModuleBuilder.build(usingSubmodules: submodules)
            
            window.rootViewController = tabBarController
            self.window = window
            window.makeKeyAndVisible()
        }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.