SwiftUI - переключение состояний панели инструментов - PullRequest
0 голосов
/ 24 июня 2019

Цель: панель инструментов, которая переключает состояния в соответствии с выбранным объектом (изображение, текст, форма)

Что я сделал:

iimport SwiftUI

struct ToolbarMaster : View {

    @State var showtoolbar = false
    var toolbarmaster:  [ToolbarBezier] =  []

    var body: some View {


        HStack {

            Spacer()

            VStack {

                Button(action: {self.showtoolbar.toggle() }) {
                    Image(systemName: "gear")
                    }
                    .padding(.leading)

                Image("dog")

                Text("Im a text")
                    .font(.largeTitle)
                    .color(.black)


                Path(ellipseIn: CGRect(x: 0, y: 0, width: 100, height: 100))
                .fill(Color.black)

            }


            NavigationView {

                ZStack {

                    ToolbarBezier()

                    ToolbarArtwork()





                }


                .navigationBarTitle(Text("Toolbar Name"), displayMode: .inline)
                }


                .frame(width: 320.0)

        }

    }

}

Мой результат: enter image description here

Как изменить состояние при выборе разных объектов?

Мне нужно сделать динамически (не жестко), чтобы при отображении любого объекта, являющегося изображением, отображалась панель инструментов изображения и т. Д.

1 Ответ

0 голосов
/ 25 июня 2019

Я бы сделал это так:

  • Добавьте логическую переменную @State для каждого состояния вашей панели инструментов
@State private var textSelected = false
  • Добавьте .onTap Событие для каждого из «активных» представлений на вашей сцене:
Text("Tap me!")
    .tapAction {
        self.textSelected = true
    }
  • Создайте видимость изменения вашей панели инструментов на основе переменной (ей) «state»
if self.textSelected {
   self.showTextToolbarContent() 
}

Конечно, showTextToolbarContent() - это локальная функция, возвращающая some View с содержимым панели инструментов, предназначенным для выделения текста.

Это, очевидно, только простой пример.В вашей реальной реализации вы, вероятно, будете использовать массив bools для состояния «selection» и другую переменную состояния для текущего выбранного представления.

...