Я пытаюсь изучить SwiftUI, но я не понимаю, почему это работает в руководстве Apple, а не в моем собственном проекте. Я хочу использовать свой собственный дизайн, а это значит, что NavigationLink
выглядит как обычная кнопка. Проблема в том, что это работает только один раз, и когда я использую кнопку <Назад, я не могу использовать кнопку «Изменить» во второй раз. </p>
import SwiftUI
import Foundation
struct TimeTrackerView: View {
@ObservedObject var timeTracker = TimeTracker()
@State private var isStart = false
var body: some View {
NavigationView {
ZStack {
Color.black
.edgesIgnoringSafeArea(.all)
VStack {
Spacer()
Text( timeString(time: self.timeTracker.time) )
.font(.largeTitle)
.foregroundColor(.white)
.padding(50)
Spacer()
HStack {
Group {
Button(action: {
self.isStart.toggle()
if self.isStart {
self.timeTracker.startTimer()
} else {
self.timeTracker.stopTimer()
}
}) {
if isStart {
Text("Stop")
.foregroundColor(.red)
} else {
Text("Start")
.foregroundColor(.white)
}
}
Spacer()
// BUG: Button works only once
NavigationLink(destination: TimeDetail()) {
Text("Edit")
.foregroundColor(.white)
}
}
}
.font(.title).padding(50)
}
}
.navigationBarTitle("Navigation")
}
}
}
func timeString(time: Int) -> String {
let hours = time / 3600
let minutes = time / 60 % 60
let seconds = time % 60
return String(format:"%1ih %1im %1is", hours, minutes, seconds)
}
struct TimeTrackerView_Previews: PreviewProvider {
static var previews: some View {
TimeTrackerView()
}
}
, и это представление TimeDetail.
import SwiftUI
struct TimeDetail: View {
var body: some View {
Group {
Text("HI, i'm View")
}.navigationBarTitle("Navi", displayMode: .inline)
}
}
struct TimeDetail_Previews: PreviewProvider {
static var previews: some View {
TimeDetail()
}
}
Я обнаружил, что когда я использую List
с NavigationLink
s, это работает. Но не с одной кнопкой.