2016-07-10 5 views
1

Ich habe ein Problem beim Abwickeln/Schließen eines View-Controllers.Schließen der Ansicht Controller von Speichern-Taste

Meine Navigationsleiste in dieser Ansicht Controller hat zwei Tasten. Die linke ist eine "Abwickeln/Beenden" -Taste, die gut funktioniert und den aktuellen Ansichtscontroller schließt und den Benutzer zurück zum Haupteinstellungsbildschirm bringt. Die zweite Schaltfläche ist eine Schaltfläche "Speichern", die die Benutzerdaten an die NSUserdefaults festschreibt. Beide Tasten tun, was sie entworfen haben. Obwohl ich möchte, dass die Schaltfläche "Speichern" noch eine Sache macht.

Ich möchte die Navigationsleiste "Save" -Taste, um weiterhin so Daten wie geplant speichern, aber ich würde auch gerne "Abwind/Exit" diese Ansicht Controller und Rückkehr zum Haupteinstellungen Ansicht Controller wie die Die Schaltfläche "Abwickeln/Beenden" der Navigationsleiste funktioniert nicht.

Hier ist mein Code für den View-Controller. Wie Sie sehen können, rufe ich die Funktion "backButtonTapped" aus meiner Funktion "settingSaveEmailAddress" auf. Ich weiß, dass die Funktion "backButtonTapped" ausgelöst wird, weil der Befehl "print" im Debug-Fenster gedruckt wird. Obwohl es meine Daten speichert, ist es nicht möglich, den View-Controller zu schließen und zum Haupteinstellungen-View-Controller zurückzukehren.

import UIKit 

class SettingsViewController: UIViewController { 


    @IBOutlet weak var settingEmailAddress: UITextField! 
    @IBOutlet weak var settingEmailAddressLastUpdate: UILabel! 

    // Constant keys for NSUserDefaults look ups 
    static let settingDefaultEmailAddress = "EMAIL_ADDRESS" 
    static let settingDefaultEmailAddressLastUpdated = "EMAIL_ADDRESS_LAST_UPDATED" 


    //End Setting - Email Address 
    @IBAction func settingSaveEmailAddress(sender: AnyObject) { 

     if (settingEmailAddress.text!.characters.count > 0) { 
      let prefs = NSUserDefaults.standardUserDefaults() 
      prefs.setObject(settingEmailAddress.text, forKey: SettingsViewController.settingDefaultEmailAddress) 
      saveTimestampEmailAddress() 
     } 
     dismissKeyboard() 
     print(settingEmailAddress.text) 
     backButtonTapped(self) 




    } 
    //End Setting - Email Address 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Uncomment these if you want to clear out the saved defaults 
     //let appDomain = NSBundle.mainBundle().bundleIdentifier! 
     //NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain) 

     let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(SettingsViewController.dismissKeyboard)) 
     view.addGestureRecognizer(tap) 

     // update labels from NSUserDefaults 
     getUserPreferences() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    // Updates the view with the user values already stored in NSUserDefaults 
    func getUserPreferences() { 
     let prefs = NSUserDefaults.standardUserDefaults() 

     // Get Email Address 
     if let email = prefs.stringForKey(SettingsViewController.settingDefaultEmailAddress) { 
      settingEmailAddress.text = email 
     } 

     // Get the last time something was stored 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle 
     dateFormatter.timeStyle = .MediumStyle 
     if let lastUpdateStored = (prefs.objectForKey(SettingsViewController.settingDefaultEmailAddressLastUpdated) as? NSDate) { 
      settingEmailAddressLastUpdate.text = "Last Update:" + dateFormatter.stringFromDate(lastUpdateStored) 
     } else { 
      settingEmailAddressLastUpdate.text = "Last Update: Never" 
     } 
    } 


    // MARK: - Keyboard responders so the keyboard goes away when we're done editing. 
    // Dismiss the keyboard when the user is finished editing. 
    func dismissKeyboard(){ 
     // Resign the first responder status. 
     view.endEditing(true) 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     return true 
    } 

    // Saves the timestamp of when the user has made a change to the NSUserDefaults 
    func saveTimestampEmailAddress() { 
     let prefs = NSUserDefaults.standardUserDefaults() 
     let timestamp = NSDate() 
     prefs.setObject(timestamp, forKey: SettingsViewController.settingDefaultEmailAddressLastUpdated) 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle 
     dateFormatter.timeStyle = .MediumStyle 
     settingEmailAddressLastUpdate.text = "Last Update:" + dateFormatter.stringFromDate(timestamp) 
    } 

    func backButtonTapped(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true, completion: nil) 
      print("Exit Triggered") 
    } 


} 

Antwort

0

Ich habe diese Funktion erstellt und bekomme nun die erwartete Funktionalität, wenn ich "Speichern" drücke.

  1. speichern NSUserDefault Daten
  2. Schließen aktuellen Viewcontroller und zurück zum meine Haupteinstellungen anzeigen Controller "SettingsMainTableViewController".

    func closeVCReturnSettings() { 
    for controller in self.navigationController!.viewControllers as Array { 
        if controller.isKindOfClass(SettingsMainTableViewController) { 
         self.navigationController?.popToViewController(controller as UIViewController, animated: true) 
         break 
        } 
        print("Return to settings") 
    } 
    } 
    
0

können Sie schreiben: -

In Objective-C

[self.navigationController popToRootViewControllerAnimated:YES]; 

In Swift

func popToRootViewControllerAnimated(_ animated: Bool) -> [UIViewController]? 

am Ende Ihrer "Save" -Buttons-Methode, wenn Ihr "Main Setting" viewController der root viewController ist.

+0

hey Bruder, wenn Sie die Antwort hilfreich vergessen Sie nicht, mart es richtig:) – dreamBegin

+0

Danke für die Zeit, leider, die nicht für mich arbeiten. Ich bin mir sicher, dass ich etwas verpasst habe, da ich neu in der iOS-Entwicklung bin. – Bill