Ios 如何在故事板中表示启动屏幕

Ios 如何在故事板中表示启动屏幕,ios,swift,Ios,Swift,现在我有一个MainViewController,它嵌入在UINavigationController中,因此导航控制器被设置为初始视图控制器 我想要的是第一次启动应用程序,然后才显示StartupViewController。但我不知道如何在我的故事板中表现这一点 如果应用程序第一次启动,则应将其设置为初始视图控制器,否则应设置导航控制器 我试图在MainViewController::viewDidLoad()中显示StartupViewController,但它也无法按我所希望的方式工作

现在我有一个
MainViewController
,它嵌入在
UINavigationController
中,因此导航控制器被设置为初始视图控制器

我想要的是第一次启动应用程序,然后才显示
StartupViewController
。但我不知道如何在我的故事板中表现这一点

如果应用程序第一次启动,则应将其设置为初始视图控制器,否则应设置导航控制器

我试图在
MainViewController::viewDidLoad()
中显示
StartupViewController
,但它也无法按我所希望的方式工作


有人知道这样做的正确方法吗?

请不要忘记给视图控制器指定标识符
StartupViewController

->在StartupViewController中启用用户交互

  if  (UserDefaults.standard.string(forKey: "keepUsername") != nil) {


        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "Revealview")
        self.present(vc, animated: false, completion: nil)
    }
    else
    {
        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

        let nextViewController = storyBoard.instantiateViewController(withIdentifier: "loginview") as! loginview
        self.present(nextViewController, animated:true, completion:nil)
     }

您好此代码可能对您有帮助:

// MARK: - Application Supporting Funcations -
func loadFirstViewController(viewController: String)
{
    // for loading first view Controller
    let storyBoard = appDelegate.AppStoryBoard()
    /////////////////////////Add Navigation Controller and set Root View Controller///////////////////////////////////////
    let object = storyBoard.instantiateViewControllerWithIdentifier(viewController) // for prelogin navigation
    self.navigationController = UINavigationController(rootViewController: object)
    self.navigationController?.navigationBar.hidden = true
    self.loadNavigationControllerToWindow()
}

func loadNavigationControllerToWindow()
{
    if self.window == nil
    {
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    }
    // for loading root view
    self.window!.rootViewController = self.navigationController!
    self.window!.makeKeyAndVisible()
}
didfishlaunchingwithoptions中调用此函数

    if((NSUserDefaults.standardUserDefaults().valueForKey("isFirstTime") != nil))
        {
            self.loadFirstViewController("LoginVC") // for loading first view controller
        }
        else
        {
            self.loadFirstViewController("WelcomeVC") // for loading first view controller
        }
在进入第二个控制器视图后放入此项

  if((NSUserDefaults.standardUserDefaults().valueForKey("isFirstTime") == nil))
    {
        NSUserDefaults.standardUserDefaults().setValue("1", forKey: "isFirstTime")
    }

这就是我在应用程序中的表现。 将此添加到appdelegate ApplicationIDFinishLaunching中

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
if (![defaults boolForKey:@"FirstTime"])
{ 
    //NSLog(@"Enter First Time ");
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    StartupViewController * firstViewController = [storyBoard instantiateViewControllerWithIdentifier:@"StartupViewController"];//AskAndAnswerViewId  RegisterViewId TagViewId HelpViewId
    self.navigationController=[[UINavigationController alloc]initWithRootViewController:firstViewController];
    self.window.rootViewController = self.navigationController;
    [self.navigationController setNavigationBarHidden:YES];
}
else    
{  
    //NSLog(@"not First Time");
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    HelpViewController *mainviewcontroller = [storyBoard instantiateViewControllerWithIdentifier:@"AskAndAnswerViewId"];
    self.navigationController=[[UINavigationController alloc]initWithRootViewController:mainviewcontroller];
    self.window.rootViewController = self.navigationController;
    [self.navigationController setNavigationBarHidden:YES];
}

一旦您在Mainviewcontroller中到达,第一次将用户默认值更改为“否”。

我理解您的问题

AppDelegate
中,尝试设置rootViewController

如果用户第一次来,我将数据存储在
NSUserDefault

并尝试在他第一次访问时设置rootViewController

在下面的示例中,我将用户导航到登录屏幕/主屏幕

let str = userDefaults.objectForKey("firstTime")  
{}else{}

为什么不使用LaunchScreen.Storyboard作为启动屏幕?你能从appDelegate发布一些代码吗?还有一件事要问,根据你的问题,你想要一个定制的加载屏幕,对吗?…是的,我想要一个屏幕,上面写着你是想从iCloud加载数据,还是刚开始刷新。当你第一次启动应用程序时,这应该只显示一次time@VivekGajbe:可能startup不是正确的词,我需要一个介绍屏幕,在应用程序第一次启动时只显示一次。我知道如何创建它,我不知道如何只显示一次VC,当应用程序第一次启动时。你是说只想第一次显示StartupViewController吗?