В моем приложении я хочу выполнить переход на основе UITapGestureRecognizer.В случае, если касание находится в верхней части экрана, следует выполнить переход к просмотру настроек.
В UIKit это было довольно просто.Я запустил executeSegue в UITapGestureRecognizer, обернув его в оператор if.
Теперь я хотел бы написать SettingsView () в SwiftUI.SettingsView () будет встроен в UIHostingController.
Мой вопрос: как я могу выполнить переход к этому UIHostingController (сообщая UIHostingController, какой View отображать)?
Я пытался использовать новый @IBSegueAction.Причиной использования этого @IBSegueAction является то, что я могу использовать его, чтобы сообщить UIHostingController, какой View отображать.Проблема в том, что я не могу вставить условие сейчас.Везде, где касание находится на экране, выполняется переход.Я не нашел способа отменить переход в @ IBSegueAction.
Мой код в настоящее время выглядит так:
@IBSegueAction func showSettingsHostingControler(_ coder: NSCoder, sender: UITapGestureRecognizer, segueIdentifier: String?) -> UIViewController? {
let location = sender.location(in: self.tableView)
if let _ = self.tableView.indexPathForRow(at: location) {
return nil
} else {
if location.y < 32 {
if location.x < view.bounds.midX {
direction = .left
} else {
direction = .right
}
return UIHostingController(coder: coder, rootView: SettingsView())
}
}
return nil
}
В настоящее время результатом является то, что приложение переходит к несуществующемуНулевой вид, когда кран находится не в той области.