SwiftUI 分段控件
SwiftUI SegmentedControl
我有一个带有两个选项的分段控件。我想根据 selectorindex 显示不同的视图。但出于某种原因,我收到警告:
Result of 'PersonalAddressView' initializer is unused
和
Result of 'CorporateAddressView' initializer is unused
struct AddressSegment : View {
@State private var selectorIndex = 0
@State private var options = ["Bireysel","Kurumsal"]
init() {
UISegmentedControl.appearance().selectedSegmentTintColor = #colorLiteral(red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.init(displayP3Red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)], for: .normal)
}
var body: some View {
VStack {
Picker("Addresses", selection: $selectorIndex) {
ForEach(0..<options.count) { index in
Text(self.options[index]).tag(index)
}
}
.onReceive([self.selectorIndex].publisher.first(), perform: { value in
if value == 0 {
PersonalAddressView()
} else {
CorporateAddressView()
}
})
.pickerStyle(SegmentedPickerStyle())
.frame(width: 216, height: 28, alignment: .center)
.cornerRadius(5)
.foregroundColor(.white)
}
}
}
下面是我想要的
您需要在 ViewBuilder 块内创建视图,而不是在像 onReceive
.
这样的函数中
尝试以下操作:
struct AddressSegment : View {
@State private var selectorIndex = 0
@State private var options = ["Bireysel","Kurumsal"]
init() {
UISegmentedControl.appearance().selectedSegmentTintColor = #colorLiteral(red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.init(displayP3Red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)], for: .normal)
}
var body: some View {
VStack {
Picker("Addresses", selection: $selectorIndex) {
ForEach(0..<options.count) { index in
Text(self.options[index]).tag(index)
}
}
.pickerStyle(SegmentedPickerStyle())
.frame(width: 216, height: 28, alignment: .center)
.cornerRadius(5)
.foregroundColor(.white)
// move the code here, to the ViewBuilder block
if selectorIndex == 0 {
PersonalAddressView()
} else {
CorporateAddressView()
}
}
}
}
我有一个带有两个选项的分段控件。我想根据 selectorindex 显示不同的视图。但出于某种原因,我收到警告:
Result of 'PersonalAddressView' initializer is unused
和
Result of 'CorporateAddressView' initializer is unused
struct AddressSegment : View {
@State private var selectorIndex = 0
@State private var options = ["Bireysel","Kurumsal"]
init() {
UISegmentedControl.appearance().selectedSegmentTintColor = #colorLiteral(red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.init(displayP3Red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)], for: .normal)
}
var body: some View {
VStack {
Picker("Addresses", selection: $selectorIndex) {
ForEach(0..<options.count) { index in
Text(self.options[index]).tag(index)
}
}
.onReceive([self.selectorIndex].publisher.first(), perform: { value in
if value == 0 {
PersonalAddressView()
} else {
CorporateAddressView()
}
})
.pickerStyle(SegmentedPickerStyle())
.frame(width: 216, height: 28, alignment: .center)
.cornerRadius(5)
.foregroundColor(.white)
}
}
}
下面是我想要的
您需要在 ViewBuilder 块内创建视图,而不是在像 onReceive
.
尝试以下操作:
struct AddressSegment : View {
@State private var selectorIndex = 0
@State private var options = ["Bireysel","Kurumsal"]
init() {
UISegmentedControl.appearance().selectedSegmentTintColor = #colorLiteral(red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.init(displayP3Red: 0.05490196078, green: 0.3254901961, blue: 0.368627451, alpha: 1)], for: .normal)
}
var body: some View {
VStack {
Picker("Addresses", selection: $selectorIndex) {
ForEach(0..<options.count) { index in
Text(self.options[index]).tag(index)
}
}
.pickerStyle(SegmentedPickerStyle())
.frame(width: 216, height: 28, alignment: .center)
.cornerRadius(5)
.foregroundColor(.white)
// move the code here, to the ViewBuilder block
if selectorIndex == 0 {
PersonalAddressView()
} else {
CorporateAddressView()
}
}
}
}