SwiftUI - Single selected显示选中值



我想当我完成选择语言并单击Save按钮时,它将返回ContentView页面并显示我所选择的语言。当我再次点击时,它必须勾选我之前选择的语言。

我已经成功显示了数据,但是当我点击保存按钮时,我不知道如何保存它

这是我目前所有的代码

ContentView

struct ContentView: View {
var body: some View {
NavigationView {
HStack {
NavigationLink(destination:LanguageView() ) {
Text("Language")
Spacer()
Text("I want to show the language here ")
}
}
}

}
}

LanguageView

struct LanguageView: View {
var body: some View {
VStack {
CustomLanguageView()

Button(action: {
})
{
Text("Save")
.foregroundColor(.black)
}
.padding()
Spacer()
}
}
}
struct CustomLanguageView: View {
var language = ["US", "English", "Mexico", "Canada"]
@State var selectedLanguage: String? = nil
var body: some View {
LazyVStack {
ForEach(language, id: .self) { item in
SelectionCell(language: item, selectedLanguage: self.$selectedLanguage)
.padding(.trailing,40)
Rectangle().fill(Color.gray)
.frame( height: 1,alignment: .bottom)
}
.frame(height:15)
}
}
}
struct SelectionCell: View {
let language: String
@Binding var selectedLanguage: String?

var body: some View {
HStack {
Text(language)
Spacer()
if language == selectedLanguage {
Image(systemName: "checkmark")
.resizable()
.frame(width:20, height: 15)
}
}
.onTapGesture {
self.selectedLanguage = self.language
}
}
}

有多种方法来"保存"但是如果你只是想让它回到另一个视图你可以这样做,我快速设置。

struct ContentView: View {

@State var language: String? = ""

var body: some View {
NavigationView {
HStack {
NavigationLink(destination:LanguageView(language: $language)) {
Text("Language")
.padding()
Spacer()
Text(language!)
.padding()
}
}
}

}
}
struct LanguageView: View {

@Binding var language: String?
@State var selectedLanguage: String? = ""

var body: some View {
VStack {
CustomLanguageView(selectedLanguage: $selectedLanguage)

Button(action: {
language = selectedLanguage
})
{
Text("Save")
.foregroundColor(.black)
}
.padding()
Spacer()
}
}
}
struct CustomLanguageView: View {
var language = ["US", "English", "Mexico", "Canada"]
@Binding var selectedLanguage: String?
var body: some View {
LazyVStack {
ForEach(language, id: .self) { item in
SelectionCell(language: item, selectedLanguage: self.$selectedLanguage)
.padding(.trailing,40)
Rectangle().fill(Color.gray)
.frame( height: 1,alignment: .bottom)
}
.frame(height:15)
}
}
}
struct SelectionCell: View {
let language: String
@Binding var selectedLanguage: String?

var body: some View {
HStack {
Text(language)
Spacer()
if language == selectedLanguage {
Image(systemName: "checkmark")
.resizable()
.frame(width:20, height: 15)
}
}
.onTapGesture {
self.selectedLanguage = self.language
}
}
}

或者如果你真的想把它保存到设备上供以后使用,你可以使用

UserDefaults.standard.setValue(selectedLanguage, forKey: "language")

然后要检索它,请执行

UserDefaults.standard.value(forKey: "language") as! String

相关内容

  • 没有找到相关文章

最新更新