Мой код работает, но я пытаюсь его понять. Это немного код, используемый для управления кнопкой «Отмена», которая может возвращаться либо из «Show» segue (отображается, когда пользователь нажимает на ячейку таблицы для редактирования), либо на «Present Modally» segue (когда пользователь нажимает кнопку " + ", чтобы добавить новую ячейку в представление таблицы). Диаграмма ниже. Я смущаюсь UINavigationController и свойством navigationController. Извиняюсь, если я пропускаю что-то очень очевидное.Быстрое понимание проблемы UINavigationController & navigationController re: presentingViewController
// Apple says below is nil if neither the current view controller nor any of its ancestors were presented modally
let isPresentingInAddMode = presentingViewController is UINavigationController
if isPresentingInAddMode {
// Modal segues need to be dismissed
dismiss(animated: true, completion: nil)
} else {
// But Show segues are "popped" off of a stack of controllers.
navigationController!.popViewController(animated: true)
}
Вот что я, не понимая: - Если я прибыл в деталях Просмотр контроллера через «Show» Segue, пауза во время выполнения, а также опция кнопкой мыши на navigationController, Xcode говорит, что это UINavigationController ? И если я приостанавливаю выполнение внутри условия else &, используйте отладчик: po navigationController! == nil - Xcode говорит, что это оценивает значение false, поэтому navigationController является допустимым UINavigationController.
Так почему же не
presentingViewController is UINavigationController
приравнять к истине в верхнем заявлении, когда я представил, используя «Показать»?
Возможно, я не понимаю «настоящего». Представляет что-то, что происходит только с модальными сегментами, так что нет представления в представленииViewController? И если я оглядываюсь назад на свою раскадровку (см. Диаграмму ниже), один из предков для Контроллера подробных представлений - это контроллер табличного представления, в котором встроен навигационный контроллер, содержащийся в определении Apple, представляющегоViewController, не должен: presentingViewController - это UINavigationController Будьте правдивы и в этой ситуации?
И будет:
presentingViewController != nil
добиться того же результата, или есть важная причина, чтобы проверить presentingViewController является UINavigationController?
Большое спасибо всем, кто может помочь мне разобрать это. Джон
Segue "ShowDetail" является "Показать" переход происходящий из табличной ячейки. Сегмент «AddItem» имеет вид «Present Modally» и берется из элемента кнопки «+» добавить панель.
Это, скорее всего, не нужно, чтобы увидеть подготовки к SEGUE кода в контроллере табличного, но если вам интересно:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if segue.identifier == "ShowDetail" { // is this the "ShowDetail" segue? and if it is...
// ... get the IndexPath for the row the user clicked on (the selected row)
let indexPath = tableView.indexPathForSelectedRow!
let destinationViewController = segue.destination as! DetailViewController // downcast the destination as the specific class DetailViewController
// Get the to do item that the user clicked on
let selectedToDo = toDoArray[indexPath.row]
// Pass selectedToDo to the toDoItem variable in our destinationViewController
destinationViewController.toDoItem = selectedToDo
}
}
, пожалуйста, добавьте код, где вы вызываете ViewControllers. – muescha
поместите фрагменты кода снизу между двумя из этого символа: '(backtick) – muescha
Привет - есть Show segue -« ShowDetail »- это его идентификатор. «AddItem» вызывается из элемента кнопки «+» добавить панель, а «ShowDetail» вызывается из ячейки представления таблицы. Я добавлю код «подготовить (для segue :) для контроллера табличного представления выше, но это не имеет значения: понимание UINavigationController и navigationController, должно ли оно? Thx – Gallaugher