Вот мой текущий демонстрационный пользовательский интерфейс, написанный на SwiftUI:
Я хочу принимать пользовательские решения по навигации и отображать на основе, если ячейка (Просмотреть 1, Вид 2, ...) был нажат или если была нажата одна из кнопок (стрелок) в ячейке.
Например, каждая ячейка представляет отдельный вид, к которому я хочу перейти, и каждую кнопку со стрелкой представляет некоторый пользовательский модал, который я хочу представить.
Как отслеживать контекст и распространять различные касания до представления, которое в конечном итоге будет принимать решения о навигации. Вот представление, которое составляет список и будет принимать решения о навигации:
import SwiftUI
struct ContentView: View {
@State var options: [String] = ["View 1", "View 2", "View 3", "View 4"]
var body: some View {
ZStack {
Color.white.edgesIgnoringSafeArea(.all)
ScrollView {
ForEach(self.options, id: \.self) { element in
OptionCell(optionDescription: element)
}
}
}
}
}
А вот мой класс OptionCell
. Я пытаюсь проиллюстрировать мою проблему в некоторых комментариях к действию кнопки здесь.
struct OptionCell {
//MARK: Input Properties
@State var optionDescription: String
//MARK: Computed Properties
//MARK: Init
//MARK: Functions
func cellTapped() {
///What can I call here to propagate the context of this cell along with the fact that it was tapped to something that needs to make UI transition decisions?
print("\(self.optionDescription) Tapped")
//What can I do to make micro navigation decisions if one of the "ArrowButtons" is tapped?
}
}
extension OptionCell: View {
var body: some View {
Button(action: { self.cellTapped() }) {
VStack {
HStack{
Text(self.optionDescription).foregroundColor(Color.black).padding()
Spacer()
HStack {
//These Views have a Button view in them with a call to a function in that struct. How do I get the call for the tap on each of these buttons propagated up to the decisions making view?
ArrowButton(direction: .LEFT)
ArrowButton(direction: ArrowDirection.RIGHT)
ArrowButton(direction: ArrowDirection.DOWN)
ArrowButton(direction: ArrowDirection.UP)
}.padding()
}
///Another custom view that I have
SeparatorView(separatorViewStyle: SeparatorViewStyle.init(weight: .THIN, gapPosition: .RIGHT, color: Colors.grey.medium))
}
}
}
}
В UIKit
Я бы добавил действия кнопки к пользовательскому UITableViewCell
, а затем создал делегат для пользовательской ячейки. Нажатие на кнопку вызовет соответствующую функцию делегата (Delegate.leftArrow (), Delegate.upArrow (), ...) и UIViewController
станет делегатом для пользовательской ячейки и примет там навигационные решения.