Переключите кнопку на панели навигации в SwiftUI и измените ее внешний вид

Используя SwiftUI, я хотел бы иметь возможность изменять кнопку на моем NavigationView на основе некоторого значения Bool, указывающего, должно ли оно быть Вкл. или Выкл..

введите здесь описание изображения

Это будет вести себя аналогично тому, как с UIKit вы можете заменить элемент кнопки панели с любой стороны экрана, чтобы при нажатии отображалась другая кнопка и связанное с ней действие.


person CodeBender    schedule 07.08.2019    source источник


Ответы (1)


Я могу заставить его работать с помощью следующего кода, но я не уверен, что это лучший способ добиться этого, поэтому я открыт для улучшения.

import SwiftUI

struct HomeList: View {
    @State var isOn = true

    var body: some View {
        NavigationView {
            List(1 ..< 4) { index in
                Text("Row \(index)")
            }
            .navigationBarTitle(Text(verbatim: "Title"), displayMode: .inline)
            .navigationBarItems(trailing:
                Button(action: {
                    self.isOn = !self.isOn
                }, label: {
                    Text(self.isOn ? "On" : "Off")
                })
            )
        }
    }
}

Ключевые элементы:

  • Использование @State модификатора в моей переменной isOn, который сообщает моему интерфейсу, что он недействителен и повторно оказывать при изменениях
  • Когда мое Button действие изменяет isOn, и оно также может поддерживать другие действия, если мне нужно
  • Тернарный оператор в моей метке Button, который обновляет Text (или Image, если я хочу), чтобы отразить правильный внешний вид

Наконец, как это проявляется в действии:

введите здесь описание изображения

person CodeBender    schedule 07.08.2019