@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. Если кран находится в верхней части экрана

Для меня это звучит так, как будто ваш распознаватель жестов касания прикреплен к неправильному виду. Здесь не должно быть никакого решения. Разместите вид в верхней части экрана и прикрепите к нему распознаватель жестов касания. Таким образом, если этот вид получает касание, решение не принимается: касание находится в нужном месте.

Другие вопросы по тегам