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")
}
}
hey Bruder, wenn Sie die Antwort hilfreich vergessen Sie nicht, mart es richtig:) – dreamBegin
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