UIHostingController блокирует события касания для базового UIHostingControllerIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 UIHostingController блокирует события касания для базового UIHostingController

Сообщение Anonymous »

Ниже у меня есть очень упрощенная версия кода, который я пытаюсь заставить работать.
Пояснение кода:
  • Код: Выделить всё

    ContentView1
    — представление SwiftUI с кнопкой и меткой счетчика.
  • Код: Выделить всё

    ContentView2
     – VStack с текстом внизу и пробелами
    сверху
  • Код: Выделить всё

    ViewController
    — стандартный контроллер представления UIKit, который
    встраивает каждое из этих представлений в свой собственный хост-контроллер и
    накладывает ContentView2 на ContentView1.
Вот код:
ContentView1

Код: Выделить всё

struct ContentView1: View {

@State var count = 0

var body: some View {

VStack {

Text("\(count)")
Button(
action: {
count += 1
},
label: {
Text("Increase")
}
)
}
}
}
ContentView2

Код: Выделить всё

struct ContentView2: View {

var body: some View {
VStack {
Spacer()
Text("Hello world")
}
}
}
ViewController

Код: Выделить всё

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// Add ContentView1
let view1 = ContentView1()
let hosting1 = UIHostingController(rootView: view1)
hosting1.view.translatesAutoresizingMaskIntoConstraints = false
self.addChild(hosting1)
self.view.addSubview(hosting1.view)
NSLayoutConstraint.activate([
hosting1.view.topAnchor.constraint(equalTo: self.view.topAnchor),
hosting1.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
hosting1.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
hosting1.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
])

// Add ContentView2
let view2 = ContentView2()
let hosting2 = UIHostingController(rootView: view2)
hosting2.view.translatesAutoresizingMaskIntoConstraints = false
hosting2.view.backgroundColor = .clear
self.addChild(hosting2)
self.view.addSubview(hosting2.view)
NSLayoutConstraint.activate([
hosting2.view.topAnchor.constraint(equalTo: self.view.topAnchor),
hosting2.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
hosting2.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
hosting2.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
])
}
}
Проблема
Кнопка в ContentView1 не работает, и я не могу найти способ отключить событие касания перешло из ContentView2 -> ContentView1.
Что я рассмотрел:
  • Вы замечу, что я уже добавил hosting2.view.backgroundColor = .clear — ContentView1 виден, но его нельзя коснуться.
  • Невозможно сделать hosting2.view.isUserInteractionEnabled = false, потому что я нужно какое-то взаимодействие с ним (не включено в упрощенный фрагмент).
  • Я не могу переписать это как одно представление SwiftUI внутри ZStack — помните, что это упрощенная версия некоторого производственного кода. что я не могу легко перенастроить таким образом.
Наконец, я попробовал следующее решение:
  • Реализуйте пользовательский PassthroughView, который наследуется от UIView и реализует точку переопределения функции (внутренняя точка: CGPoint, с событием: UIEvent?) -> Bool
  • Создать PassthroughHostingController и переопределить loadView, установив пользовательское сквозное представление
Но это еще хуже — представление SwiftUI даже не загружается с этим решением.
Как это решить?

Подробнее здесь: https://stackoverflow.com/questions/793 ... controller
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • UIHostingController блокирует события касания для базового UIHostingController
    Anonymous » » в форуме IOS
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • UIHostingController блокирует события касания для базового UIHostingController
    Anonymous » » в форуме IOS
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Сделайте так, чтобы прозрачная часть изображения пропускала касания и сохраняла касания на видимой части.
    Гость » » в форуме Android
    0 Ответы
    61 Просмотры
    Последнее сообщение Гость
  • Android 12 блокирует касания при использовании
    Anonymous » » в форуме Android
    0 Ответы
    126 Просмотры
    Последнее сообщение Anonymous
  • Qt VNC-сервер отправляет события касания в удаленное приложение
    Гость » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Гость

Вернуться в «IOS»