Swift 仅在首次启动时才显示ViewController

Swift 仅在首次启动时才显示ViewController,swift,uiviewcontroller,Swift,Uiviewcontroller,我想让名为“DoctorInformation Controller”的viewController仅在用户首次启动应用程序时显示。我看到一些人的答案,但我想知道如何在swift中做到这一点,请 谢谢无法判断这是否是UIKit框架中内置的第一次发布,但是您可以用另一种方式来完成 在AppDelegate.swift中,转到ApplicationIDFinishLaunchingWithOptions方法(通常是第一个)。现在,添加以下内容: //Check for key "first_laun

我想让名为“DoctorInformation Controller”的viewController仅在用户首次启动应用程序时显示。我看到一些人的答案,但我想知道如何在swift中做到这一点,请


谢谢

无法判断这是否是UIKit框架中内置的第一次发布,但是您可以用另一种方式来完成

在AppDelegate.swift中,转到ApplicationIDFinishLaunchingWithOptions方法(通常是第一个)。现在,添加以下内容:

//Check for key "first_launch" in User Defaults
if let _ = NSUserDefaults.standardUserDefaults().objectForKey("first_launch") {

    //Set your own global variable to be true. Then, when your ViewController 
    //loads, do a popup window with that DoctorViewController thingy if the
    //variable is true
    //Example:
    isFirstLaunch = true

    //Then, set "first_launch" to be a value so your app will never call this block again 
    NSUserDefaults.standardUserDefaults().setObject("", forKey: "first_launch")

}

我使用的这段代码将根据应用程序的第一次或第二次启动来启动viewcontoller

这将在AppDelegate中显示。

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


  let firstLaunch = defaults.boolForKey("FirstLaunch")

  if firstLaunch  {
    print("Not first launch.")

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

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

    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("navController") as! UINavigationController

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


  } else {
    print("First launch, setting NSUserDefault.")

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

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

    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("firstrunVCstoryboard") as UIViewController

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

  }

  return true
}
您需要调整它以适合您的故事板和ViewController名称

编辑:

这就是我如何在first view控制器中设置值以指示第一次运行已完成的方式。这样它就不会再出现了

 self.defaults.setBool(true, forKey: "FirstLaunch")

只需发送一个get请求到

http://ip-api.com/json
它将响应完整的设备地理位置数据,包括ip地址

{
    "status": "success",
    "country": "COUNTRY",
    "countryCode": "COUNTRY CODE",
    "region": "REGION CODE",
    "regionName": "REGION NAME",
    "city": "CITY",
    "zip": "ZIP CODE",
    "lat": LATITUDE,
    "lon": LONGITUDE,
    "timezone": "TIME ZONE",
    "isp": "ISP NAME",
    "org": "ORGANIZATION NAME",
    "as": "AS NUMBER / NAME",
    "query": "IP ADDRESS USED FOR QUERY"
}

我会使用
NSUserDefaults
中的首选项来跟踪工作表之前是否显示过。您可以决定在应用程序委托中显示工作表,方法applicationdFinishLaunching()好的!你介意用一些示例代码来回答这个问题吗?@OriginalAlchemist如果你找到了一个答案,你能把一个标记为最好的或者展示一下你是如何完成任务的吗?为什么不使用
setBoolForKey:
?@nielsbot只要有东西就行了。我不是在检查它是否真实,我是在检查它是否存在。相同的区别,对吗?我添加了这个,似乎在if语句中出现了一个错误,它说:“条件绑定的初始值设定项必须具有可选类型,而不是‘string’”。我该怎么解决这个问题,对不起,斯威夫特的新手@原版化学家对不起,我打错了。将
替换为!字符串
为?字符串
。我现在正在对答案进行编辑,您可以将
保留为?字符串
Gotcha!非常感谢。此代码是否调整为在第二次发布时运行?因为我只是第一次需要它,就这样。它每次都运行,如果第一次启动被录制,那么它会为第二次启动加载viewcontroller。我使用这种格式,以便在更新过程中,如果需要检查某些内容,我可以触发首次启动屏幕。