У меня проблема с разматыванием/закрытием контроллера просмотра.Закрытие контроллера просмотра из кнопки сохранения
Моя панель навигации в этом виде контроллера имеет две кнопки. Левая кнопка «Unwind/exit», которая отлично работает и закрывает текущий контроллер представления и возвращает пользователя обратно на экран основных настроек. Вторая кнопка - это кнопка «Сохранить», которая фиксирует данные пользователей на NSUserdefaults
. Обе кнопки выполняют то, что они предназначены. Хотя я бы хотел, чтобы кнопка «Сохранить» сделала еще одну вещь.
Я бы хотел, чтобы кнопка «Сохранить» на панели навигации продолжала сохранять как данные в соответствии с ее конструированием, но мне также хотелось бы, чтобы «Unwind/Exit» отображал контроллер и возвращался к главному диспетчеру настроек так же, как Кнопка «Разморозка/Выход» на панели навигации.
Вот мой код для контроллера вида. Как вы сможете увидеть, я вызываю функцию «backButtonTapped» из моей функции «settingSaveEmailAddress». Я знаю, что функция «backButtonTapped» запускается, потому что команда «print» печатает в окне отладки. Несмотря на то, что он сохраняет мои данные, он не может закрыть контроллер просмотра и снова вернуться к контроллеру представления основных настроек.
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")
}
}
эй брат, если вы найдете ответ полезным не забудьте витрину это правильно:) – dreamBegin
Спасибо за время, к сожалению, не работает для меня. Я уверен, что пропустил что-то, так как я новичок в разработке iOS. – Bill