Подтвердить что ты не робот

Отменить разворот от кнопки навигации в Swift

У меня есть экран настроек, в котором у меня есть ячейка таблицы. Нажимая на это, я беру на другой экран, где пользователь может выбрать опцию, и я хочу, чтобы она была обратно в предыдущем контроллере представления при нажатии кнопки "Назад" .

enter image description hereenter image description here

Я могу поместить элемент пользовательской панели, но я хочу вернуться к родительскому контроллеру представления, используя кнопку "Назад" на панели навигации, а не с помощью специальной кнопки на представлении.

Кажется, я не могу переопределить кнопку навигации назад, чтобы указать ее на мое действие unind segue, а так как кнопка back не появляется на раскадровке, я не могу перетащить на нее зеленую кнопку выхода

Можно ли разблокировать кнопку push с помощью кнопки "Назад" ?

4b9b3361

Ответ 2

Здесь мое решение на основе кода Objective-C от Blankarsch к этому вопросу StackOverflow: Как заблокировать событие кнопки "Назад"

Поместите этот код внутри контроллера просмотра, который вы хотите уловить вызов кнопки "Назад":

override func didMoveToParentViewController(parent: UIViewController?) {
    if (!(parent?.isEqual(self.parentViewController) ?? false)) {
        println("Back Button Pressed!")
    }
}

Внутри блока if обрабатывайте все, что вам нужно для возврата. Вам также понадобится вернуть ссылку на контроллер вызовов, так как на данный момент, как правило, оба родителя и self.parentViewController равны нулю, поэтому вы не можете перемещаться по дереву диспетчера представлений.

Кроме того, возможно, вам удастся просто проверить родительский для nil, поскольку я не нашел случай, когда нажатие кнопки "Назад" не приводило к тому, что родительский элемент был равен нулю. Итак, что-то вроде этого немного более кратким:

override func didMoveToParentViewController(parent: UIViewController?) {
    if (parent == nil) {
        println("Back Button Pressed!")
    }
}

Но я не могу гарантировать, что это будет работать каждый раз.

Эндрю

Ответ 3

В контроллере представления выполните следующие действия: имеет кнопку

Swift 3

override func didMove(toParentViewController parent: UIViewController?) {
    if (!(parent?.isEqual(self.parent) ?? false)) {
        print("Parent view loaded")
    }
}

Ответ 4

Я попробовал то же самое, и кажется, что вы не можете поймать стандартное действие кнопки "назад", поэтому решение будет заключаться в использовании пользовательской кнопки и привязки ее к сегменту, который вернется к предыдущей странице.

Ответ 5

Вы можете использовать какую-то делегацию, как и вы, или использовать пользовательскую кнопку "Назад" и "Развернуть сеанс".

Лучше даже, вы можете обрабатывать передачу данных между вашими контроллерами представления с помощью посредника:

http://cocoapatterns.com/passing-data-between-view-controllers/