2016-03-07 19 views
3

所以我有一個視圖控制器是應用程序的初始視圖控制器4個按鈕。NSUserDefaults的使用節省的ViewController頁觸動按鈕塞格斯到導航控制器

每個按鈕是「SHOW」 segued到不同的導航控制器(其連接到一個UITableView)。

我的目標就是以某種方式保存哪個按鈕被觸動NSUserDefaults的使用和跳過視圖控制器和應用程序被打開,每次直接到選定的導航控制器!這可能嗎?

我在斯威夫特

寫這本是我的AppDelegate(上警告 「變種buttonSelected」):

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

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

     var buttonSelected = NSUserDefaults.standardUserDefaults().integerForKey("buttonSelected") 

     print("run") 

     return true 
    } 
} 

這是我的視圖控制器爲我的4個按鍵:

import UIKit 

class NSUserDefault: UIViewController { 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

     var buttonSelected: Int = 0 

     if (segue.identifier == "button1Segue") { 

      buttonSelected = 1 
     } 

     else if (segue.identifier == "button2Segue") { 

      buttonSelected = 2 
     } 

     else if (segue.identifier == "button3Segue"){ 
      buttonSelected = 3 
     } 

     else if (segue.identifier == "button4Segue") { 
      buttonSelected = 4 
     } 

     NSUserDefaults.standardUserDefaults().setInteger(buttonSelected, forKey: "buttonSelected") // Save the selection in user defaults 
     NSUserDefaults.standardUserDefaults().synchronize() // Save changes 

     print("runs") 

     if buttonSelected == 1 { 
      let welcomeVC: UIViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ONW") as UIViewController 
      self.parentViewController?.presentViewController(welcomeVC, animated: true, completion: nil) 
     } 

     if buttonSelected == 2 { 
      let welcomeVC: UIViewController = self.storyboard!.instantiateViewControllerWithIdentifier("OE") as UIViewController 
      self.parentViewController?.presentViewController(welcomeVC, animated: true, completion: nil) 
     } 

     if buttonSelected == 3 { 
      let welcomeVC: UIViewController = self.storyboard!.instantiateViewControllerWithIdentifier("OS") as UIViewController 
      self.parentViewController?.presentViewController(welcomeVC, animated: true, completion: nil) 
     } 

     if buttonSelected == 4 { 
      let welcomeVC: UIViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ON") as UIViewController 
      self.parentViewController?.presentViewController(welcomeVC, animated: true, completion: nil) 
     } 
    } 
} 
+1

看看這個https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/ –

+0

在你的AppDelegate中,實現類似於這裏的答案:http:/ /stackoverflow.com/questions/27208103/swift-detect-first-launch – Shades

+0

就又跑它在我的手機上,它仍然繼續啓動初始視圖控制器...我會上傳新的代碼回到我的問題@Shades –

回答

0

是的,這是可能的。

1)你已經知道被按下哪個按鈕,這樣就得到這些信息。在prepareForSegue()或按鈕的IBAction中執行此操作(如果有)。

2)保存在用戶的默認

3)的值當你的應用程序啓動,讀取用戶的默認鍵和顯示正確的視圖控制器。

下面是如何保存的信息:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

     var buttonSelected: Int = 0 

     if (segue.identifier == "button1Segue") { 

      buttonSelected = 1 
     } 

     else if (segue.identifier == "button2Segue") { 

      buttonSelected = 2 
     } 

     // Etc . . . 

     NSUserDefaults.standardUserDefaults().setInteger(buttonSelected, forKey: "buttonSelected") // Write the selection in user defaults 
     NSUserDefaults.standardUserDefaults().synchronize() // Save changes 
    } 

這裏有一種方法可以選擇的路徑:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     let buttonSelected = NSUserDefaults.standardUserDefaults().integerForKey("buttonSelected") 

     if buttonSelected != 0 { 

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

      switch buttonSelected { 
      case 1: 
       vcName = "Button1Controller" 
      case 2: 
       // Etc 
      } 

      let vc = storyboard.instantiateViewControllerWithIdentifier(vcName) 
      self.window?.rootViewController?.presentViewController(vc, animated: true, completion: nil) 
     } 
     else { 
     // The user default wasn't saved yet 
     } 
    return true 
} 
+0

你會在哪裏放置「保存信息」代碼? AppDelegate還是在ViewController.swift中? –

+0

「save」代碼是prepareforsegue()中的最後一行,它將選擇保存到用戶默認值。我將更新代碼 – Shades

+0

我在哪裏放置「如何閱讀信息」? –

0

我希望這將到

@IBAction func saveButton(sender: UIButton) 
{ 
    let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setBool(true, forKey: "button1") 
    defaults.synchronize() 
} 

您檢查按鈕會這樣

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

    let prefs = NSUserDefaults.standardUserDefaults() 
    if let prefs.boolForKey("button1") == true {   
     // here code if button was clicked 
    } else {   
     // here code if button was not clicked 
    } 

    return true 
    } 
+0

我會在哪裏放置「檢查按鈕」代碼?會去我的AppDelegate.swift嗎? –

+0

我已經更新的答案抱歉,因爲混淆... :) – typedef

+0

這是更永久的解決方案嗎?即時通訊希望,即使當我殺了應用程序...並重新加載它將通過初始視圖控制器,並直接進入TableViewController –

相關問題