Программно нажмите кнопку «Назад» для UIViewController с UITableView iOS swift - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть UIViewController, который реализует UITableViewDelegate, UITableViewDataSource и который содержит UITableView в качестве переменной-члена.Когда пользователь нажимает на одну из строк этой таблицы, приложение выполняет переход к раскадровке, чтобы открыть контроллер подробного представления.Этот контроллер подробного представления, конечно же, имеет кнопку в левом верхнем углу экрана, которая является кнопкой «назад», чтобы вернуться к UIViewController с помощью UIViewTable.

Итак, предположим, что я хочу программно «нажать«эта кнопка назад.Как именно я буду делать это в быстрой?Это самая последняя версия swift (swift 4?) В XCode 10.1.

ОБНОВЛЕНИЕ:

Итак, вот как я решил это.Как показывают ответы ниже, можно использовать self.navigationController? .PopViewController (animated: true), чтобы просто вернуться к предыдущему контроллеру представления.Однако я обнаружил, что хотел также вызвать конкретный метод в этом контроллере представления, чтобы он выполнял определенное поведение после его отображения.Оказывается, это также возможно, но в моем случае это было немного сложно, так как контроллер предыдущего представления был на самом деле UITabBarController.Поэтому мне нужно было получить интересующий меня ViewController от UITabBarController.Я сделал это так:

let numvc = navigationController!.viewControllers.count
let tvc:UITabBarController = navigationController!.viewControllers[numvc-2] as! UITabBarController
let my_vc: MyCustomVC = tvc.viewControllers![0] as! MyCustomVC
my_vc.some_function()

Здесь, конечно, MyCustomV - это мой класс контроллера пользовательских представлений, а some_function () - метод, который я хочу вызвать в этом классе.Надеюсь, это кому-нибудь поможет.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы уверены, что вам нужно «нажать» кнопку?

  • Если все, что вам нужно, это закрыть диспетчер представления подробностей, вы можете просто позвонить navigationController?.popViewController(animated: true)
  • или еслиЕсли вы хотите иметь дело непосредственно с кнопкой, вы можете сказать ей, чтобы она отправляла свои действия: backButton.sendActions(for: .touchUpInside)
  • Или, если вам абсолютно необходимо показать анимацию нажатия кнопки, вам понадобится что-то вроде этого (вы должны поиграть и выбратьподходящая задержка):
    backButton.isHighlighted = true
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
        backButton.isHighlighted = false
        backButton.sendActions(for: .touchUpInside)
    }
    
0 голосов
/ 06 февраля 2019

Когда вы запускаете segue, вы выполняете метод «pushViewController» для перехода к следующему представлению, поэтому, если вы хотите программно вернуться к предыдущему представлению, вам просто нужно вставить последнее представление следующим образом:

self.navigationController?.popViewController(animated: true)

ОБНОВЛЕНИЕ Вам просто нужен оператор if , если у вас есть несколько сегментов из этого viewController, если нет, вы можете удалитьи просто приведите следующее представление по своему усмотрению и задайте свойства, дайте автозаполнению написать метод * prepare (для segue ... *), чтобы вы не столкнулись с какими-либо проблемами

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "yourSegueName" {
        let destinationVC = segue.destination as! CustomViewController
        destinationVC.labelExample.text = "Some text I'm sending"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...