У меня есть приложение CoreData с довольно длинным списком полей данных. Когда пользователь редактирует поля, но пытается выйти из DetailViewController без сохранения изменений, я вызываю предупреждение, если они действительно хотят отменить изменения. Это прекрасно работает, но если пользователь удаляет домашний ключ, изменения теряются. Я попытался представить предупреждение перед тем, как приложение войдет в фоновый режим, но не смогли задержать вход в фоновый режим, чтобы позволить пользователю вводить данные. Возможно ли задержать запись приложения в фоновом режиме во время ожидания ввода пользователя?Разрешить ввод пользователя перед тем, как приложение вводит фон
Вот что я пробовал:
func applicationWillResignActive(_ notification : Notification) {
//this does not work - alert is too late
cancelUnsavedEdits()
//try above
}//applicationWillResignActive
Метод canelUnsavedEdits довольно прямо вперед:
func cancelUnsavedEdits() {
if hasChanged {
let ac = UIAlertController(title: nil, message: nil, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "Delete Edits", style: .default, handler: { (action : UIAlertAction!) -> Void in
self.codeDismissTheKeyboard()
self.performSegue(withIdentifier: "unwindToMasterViewController", sender: self)
let editRecordButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.edit, target: self, action: #selector(DetailViewController.editThisRecord))
self.navigationItem.rightBarButtonItem = editRecordButton
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.hidesBackButton = false
//need to remove the edits - refresh the original page
self.configureView()
}))//addAction block
ac.addAction(UIAlertAction(title: "Save Edits", style: .default, handler: { (action : UIAlertAction!) -> Void in
self.codeDismissTheKeyboard()
self.saveTheEditedRecord()
self.performSegue(withIdentifier: "unwindToMasterViewController", sender: self)
}))//addAction block
//for -ipad add code in handler to reopen the fields for editing if the cancel of the cancel is chosed
ac.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (whatever) in
//print("makeEntryFieldsEnabledYES for ipad")
self.makeEntryFieldsEnabledYES()
}))
//above for ipad
self.present(ac, animated: true, completion: nil)
} else {
self.codeDismissTheKeyboard()
//add this for ipad
self.navigationItem.rightBarButtonItem = nil
//add above for ipad
self.performSegue(withIdentifier: "unwindToMasterViewController", sender: self)
}//if hasChanged
//this for ipad
navigationItem.leftBarButtonItem = nil
//above for iPad
}//cancelUnsavedEdits
Любое руководство по стратегии достижения этой идеи будут оценены. iOS 10, Xcode 8.1
Возможный дубликат [предупреждение кнопки домашней кнопки iOS, возможно ли это?] (Http://stackoverflow.com/questions/7112723/ios-home-button-warning-is-it-possible) –
Не могли бы вы изменить, где вы сбросить поля редактирования? Хотя имеет смысл выдвинуть «Вы уверены?» при выходе из экрана подробного просмотра также имеет смысл возвращать пользователя на тот же самый экран с подробным представлением точки с полями, как они были, - после нажатия кнопки «домой». – dfd