Storyboard'ları kullanarak ilk görünüm denetleyicisini programlı olarak ayarlama


252

InitialViewControllerBir Storyboard için programlı olarak nasıl ayarlayabilirim ? Film şeridi, lansmandan lansmana kadar değişebilecek bazı koşullara bağlı olarak farklı bir görünüme açmak istiyorum.


1
Bu cevabı uyarmadan, ayarlardaki Ana film şeridini temizlemeden kontrol edin .
Borzh

Yanıtlar:


466

Sahte ilk görünüm denetleyicisi olmadan nasıl

Tüm ilk görünüm denetleyicilerinde bir Öykü Paketi Kimliği bulunduğundan emin olun.

Film şeridinde, ilk görünüm denetleyicisinden "Başlangıçtaki Görünüm Denetleyicisi" özelliğinin işaretini kaldırın.

Uygulamanızı bu noktada çalıştırırsanız şunları okuyacaksınız:

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

Ve uygulama temsilcisindeki pencere mülkünüzün artık sıfır olduğunu fark edeceksiniz.

Uygulamanın ayarında, hedefinize ve Infosekmesine gidin. Orada değeri açık Main storyboard file base name. On Generalsekmesi, değerini temizleyin Main Interface. Bu uyarıyı kaldıracaktır.

Uygulama temsilcisinin application:didFinishLaunchingWithOptions:yönteminde pencereyi ve istenen ilk görünüm denetleyicisini oluşturun :

- (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
Aşk! Aşk! Aşk! Bunu IOS6 ve IOS7 için tamamen farklı iki görünüm denetleyicisi ağacı arasında geçiş yapmak için kullanacağım. IOS7'deki tüm çanları ve ıslıkları kullanmaya devam ederken geriye dönük uyumluluğun üstesinden gelmenin en iyi yolu gibi görünüyor.
Hunkpapa

6
Swift'te iOS programlamayı öğreniyorum. Herkes hızlı bir şekilde yukarıdaki kodu yazmak için bana yardımcı olabilir. lütfen yardım et. Teşekkürler.
Raghavendra

1
@bdv didFinishLaunchingWithOptions, uygulama yeni bir işlemde başlatıldığında çağrılır. Ana ekrana gidip uygulamaya geri dönerseniz, bu yöntem tekrar çağrılmaz. (İOS bellek kısıtlamaları nedeniyle sona ermediği sürece.) Uygulamayı durdurmayı ve IDE'nizden bir kez daha başlatmayı deneyin. Sorun devam ederse, sorunu SO'ya gönderin ve size yardımcı olmaktan memnuniyet duyarız, arkadaşım.
Travis

2
@peyman İncelememe göre ana film şeridine yapılan referans kaldırıldıktan sonra pencere mevcut değil. Mevcut projemdeki pencere örneklemesini açıkladım ve bunun hala böyle olduğunu gördüm.
Travis

2
@Raghav, işte hızlı kod: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

Hepsi için Swift orada severler, burada tarafından cevaptır @Travis çevrildi SWIFT :

@Travis'in Amaç C kodundan önce açıkladıklarını yapın . Sonra,

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
}

ExampleViewControllerEğer göstermek istiyorum yeni başlangıç görünümü denetleyicisi olacaktır.

Adımlar açıklanmıştır:

  1. Geçerli pencerenin boyutuyla yeni bir pencere oluşturun ve ana penceremiz olarak ayarlayın
  2. Yeni ilk görünüm denetleyicimizi oluşturmak için kullanabileceğimiz bir storyboard örneği oluşturun
  3. Yeni ilk görünüm denetleyicimizi Storyboard kimliğine göre başlatın
  4. Yeni penceremizin kök görünümü denetleyicisini yeni başlattığımız yeni denetleyicimiz olarak ayarlayın
  5. Yeni penceremizi görünür yap

Keyfini çıkarın ve mutlu programlama!


Ben bu sürüm için @Travis sormak, ve sonra .... yine de teşekkürler.
dellos

Film şeridi kimliği, Kimlik denetçisi bölmesindeki Kimlik bölümünde
Dominic

2
Film şeridi kimliğine gerek duyulmayacak bir ipucu, film şeridindeki ilk görünüm denetleyicisini (rootViewController) açıkça ayarlamak ve yukarıda önerilen denetleyici yerine UIStoryboard.instantiateViewControllerWithIdentifier () örnek yöntemini kullanmaktır. Gerisi aynı.
Eric Boumendil

45

Anahtar pencerenin rootViewController'ını programlı olarak (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Örneğin:

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

Daha sonra ikincil UIViewController'dan özgün giriş noktası nasıl başlatılır?
ooxio

@ooxio: orijinal giriş noktasını global bir yerde saklayabilir ve daha sonra kullanabilirsiniz.
Chengjiong

Eğer giriş / kayıt ya da bunun gibi bir şey başlatmak istiyorsanız bu gerçekten yararlıdır ...
Bal

Bu, @ Travis'in yukarıdaki cevabından çok daha basittir, çünkü bir milyon proje ayarıyla uğraşmak ve IB'de dolaşmak zorunda değilsiniz. Görünüm denetleyicilerinizden birinin teknik olarak varsayılan ilk VC olup olmadığını ve kimin programlı olarak farklı bir tanesine yönlendirileceğini kim umursar?
Danny

Değiştirilen, film şeridi olarak adlandırılan ilk Görünüm Denetleyicisinin yine de somutlaştırılacağını ve init()/ deinit()döngüsünün içinden geçeceğini , ancak -s yürütülmeden viewDidLoad()veya uygun şekilde başlatılmayacağını unutmayın IBOutlet. Kodun buna hazır olduğundan emin olun.
Gary

14

Swift 3: @ victor-sigler kodunda güncelleme

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
}

Teşekkürler @MEK. Ayrıca, sondaki parantezleri ayraçlarla değiştirerek koşullu kapanış ifadelerinin sözdizimini düzeltmek isteyebilirsiniz.
Native_Mobile_Arch_Dev

9

Gezinme rootviewcontroller'ı ana görünüm denetleyicisi olarak ayarlayabilirsiniz. Bu fikir, uygulama gereksinimlerine göre otomatik oturum açma için kullanılabilir.

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 Kullanıcıları için

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

Teşekkürler


6

Ana panoyu açın, önce başlamasını istediğiniz görünümü seçin, ardından Yardımcı Programlar -> Özellikler'i açın. "Görüntü Denetleyici" nin altında "Başlangıç ​​Görüntü Denetleyicidir" radyo düğmesini görürsünüz. Sadece seçin.

--- Gözden geçirilmiş soruya:

Bunu deneyebilirsiniz: başlangıç ​​görünümünüzün ViewDidLoad bölümüne bir yöntem yazın ve yöntem uygulama başlatıldığında çalıştığında, yöntem bir segue'i başka bir görünüme tetikler.


Metodu ViewDidLoad'a yazdım ama işe yaramadı ve viewdidAppear'da çalıştığımda işe yarayıp yaramadığını açıklayabilir misiniz?
UserDev

Belki şunu denemelisiniz: AppDelegate.m dosyasındaki uygun yöntemlerden birine koşullarınıza göre bir segue kodu ekleyin. Örneğin, "applicationDidBecomeActive:" yöntemine bir segue kodu ekleyebilirsiniz.
m.etka

@Jagdev, ViewDidLoad yerine ViewDidAppear'da yazarsınız.
Umair Khan Jadoon

Bu yaklaşımla ilgili sorun, ilk görüş kontrolörünün bir süre görünür hale gelmesi ve daha sonra UX açısından iyi olmayan diğerine geçmesi, iyi bir çözüm olmamasıdır.
vishal dharankar

3

SWIFT 5

Film şeridinde ilk ViewController olarak ayarlanmış bir ViewControllerınız yoksa 2 şey yapmanız gerekir:

  1. Projenizin HEDEFLERİNE gidin, projenizi seçin -> Genel -> Ana Arayüz alanını temizleyin.
  2. Her zaman projenin HEDEFLERİ içinde, şimdi Bilgi -> Uygulama Sahne Manifestosu -> Sahne Yapılandırması -> Uygulama Oturum Rolü -> Öğe0 (Varsayılan Yapılandırma) -> film şeridi adı alanını silin.

Son olarak, kodunuzu şimdi SceneDelegate'e ekleyebilirsiniz:

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

}

Bu kesinlikle Xcode 11.5 itibariyle en güncel cevaptır ve gerçekten Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not setkoddaki ilk VC'mi başlatmaya karar verdikten sonra aldığım uyarıyı düzeltti . Önemli bir nokta, @ rs7 "film şeridi adı alanını sil" dediğinde, sadece alanın içeriği değil, plistin tüm satırı anlamına gelir.
cdf1982

2

Bunun mümkün olduğunu düşünmüyorum. Bunun yerine, farklı görünüm denetleyicilerine bağlı olacak bir ilk denetleyiciniz olabilir. Başlangıçta hangi seguein programlı olarak yapılacağına karar verebilirsiniz.


2

initial view controllerInterface Builder'ı kullanarak ve programlı olarak ayarlayabilirsiniz .

Aşağıda programlı olarak kullanılan yaklaşım verilmiştir.

Amaç-C:

        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;

Swift:

        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

Dinamik gezinmeyi idare etmek ve AppDelegate sınıfını temiz tutmak için bir yönlendirme sınıfı oluşturdum, umarım diğerlerine de yardımcı olacaktır.

//
//  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()
    }

}

Ve AppDelegate'inizde buna

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

2

Hızlı dökümden kaçınarak Swift 3 ve Swift 4'ü kullanmanın başka bir çözümü şöyledir

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
}

Ve aşağıda 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

İçinde AppDelegate.swiftaşağıdaki kodu ekleyebilirsiniz:

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

Elbette, hangi kriterlere göre uygun bir görünüm denetleyicisi seçeceğinize bağlı olarak mantığınızı uygulamanız gerekir.

Ayrıca, bir kimlik eklemeyi de unutmayın (film şeridi -> Denetleyici Sahnesi -> Kimlik denetçisini göster -> StorboardID'yi atayın).


1

İOS 13 ve sahne delegesi için GÜNCEL CEVAP:

info.plist dosyanızda Application Scene Manifest -> Scene Configuration -> Application Session Role -> Item 0 bölümüne girdiğinizden emin olun ve orada ana storyboard referansını da silin. Aksi takdirde, film şeridinden örneklenememe konusunda aynı uyarıyı alırsınız.

Ayrıca, uygulama delegesinden kodu sahne delege yöntemi sahnesine (_: willConnectTo: options :) taşıyın, çünkü yaşam döngüsü olaylarının işlendiği yer burasıdır.


0

Birkaç gün önce aynı durumla karşılaştım. Çok basit bir hile bu sorunu çözdü. İlk görünüm denetleyicimi lansmandan önce gizledim. İlk görünüm denetleyicisi doğru denetleyiciyse, viewDidLoad içinde görünür olarak ayarlanır. Aksi takdirde, istenen görüntü denetleyicisine bir segue gerçekleştirilir. İOS 6.1 ve sonraki sürümlerde mükemmel çalışır. Eminim iOS'un önceki sürümlerinde çalışır.


0

Teşekkürler bunu AppDelegate'de şu şekilde değiştirdi:

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

Basit bir çözüm bulundu - film şeridi ve düzenleme projesi Bilgi sekmesinden "ilk görünüm denetleyicisi kontrolünü" kaldırmaya gerek yok ve kullanın makeKeyAndVisible, sadece yerleştirin

self.window.rootViewController = rootVC;

içinde

- (BOOL) application:didFinishLaunchingWithOptions:

Ama yine de olsun rootVCgelen instantiateViewControllerWithIdentifierdoğru?
thomers

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

Başka bir yol da viewController'ı sunmaktır,

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

İlk önce film şeridinizin nesnesini oluşturmanız ve ardından kök değiştirmeniz (gerekirse), o zaman geçerli görünüm denetleyicisine (kök değiştirirseniz) itilen belirli bir görünüm denetleyicisinin referansını almanız gerekir;


@VD Purohit, daha fazla anlayış için cevabınız hakkında daha fazla bilgi verebilir misiniz?
Prags

0

Swift 4, Xcode 9

AppDelegate.swift dosyasında

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 üzerinde kontrol Varsayılan değer tercihleri ​​değeri Tamamen Kayıtlı Durumda ve intial görünümde Durum Kontrolü Kontrolör Sorunu
charles

0

Swift 5 veya üstü # bu basit kodla rota görünümü denetleyicisi yapar. Xcode 11 veya daha yeni bir var window: UIWindow?sürümü kullanıyorsanız, ilk olarak AppDelegate'te başlangıç durumuna getirin

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

ApplicationDidFinish'i değiştirmemeyi tercih ederseniz, aşağıdaki hileyi yapabilirsiniz:

Gezinti denetleyicisini ilk görünüm denetleyicisi olarak ayarlayın ve ona özel bir sınıf 'MyNavigationController' atayın. Sonra viewDidLoad sırasında kök görünümü denetleyicisini düzenleyebilirsiniz - film şeridinde ayarladığınız kök görünümü denetleyicisini geçersiz kılar.

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

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

}

-3

Önce açmak istediğiniz görünüm denetleyicisini seçin ve nitelik denetçisine gidin. İlk sahneye gidin ve ilk görüntüleme denetleyicisi seçeneği olup olmadığını kontrol edin.

Şimdi bu, uygulama başlatıldığında ilk açılacak ilk görünüm denetleyiciniz olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.