@IBSegueAction с условием
В моем приложении я хочу выполнить переход на основе 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
}
В настоящее время результатом является то, что приложение переходит к несуществующему Nil-представлению, когда касание находится в неправильной области.
1 ответ
основанный на UITapGestureRecognizer. Если кран находится в верхней части экрана
Для меня это звучит так, как будто ваш распознаватель жестов касания прикреплен к неправильному виду. Здесь не должно быть никакого решения. Разместите вид в верхней части экрана и прикрепите к нему распознаватель жестов касания. Таким образом, если этот вид получает касание, решение не принимается: касание находится в нужном месте.