Hi,
You need to go "one level up" with the selectedItem @Binding, try with this:
QuickCalculationsView
struct QuickCalculationsView: View
{
@Environment(\.horizontalSizeClass) var hSizeClass
@Environment(\.verticalSizeClass) var vSizeClass
@State private var selectedItem = 0
@ObservedObject var settings = MySettingsSingleton.shared
var body: some View
{
ZStack
{
Color.brown
.edgesIgnoringSafeArea(.all)
GeometryReader
{ geometry in
if geometry.size.height > geometry.size.width // PORTRAIT
{
if UIScreen.main.traitCollection.userInterfaceIdiom == .phone
{
portraitArrangement(Width: geometry.size.width, Height: geometry.size.height)
}
else if UIScreen.main.traitCollection.userInterfaceIdiom == .pad
{
if settings.isLeftHanded == YES
{
if hSizeClass == .compact
{
portraitArrangement(Width: geometry.size.width, Height: geometry.size.height)
}
else
{
landscapeArrangementLeftHanded(Width: geometry.size.width, Height: geometry.size.height)
}
}
else
{
if hSizeClass == .compact
{
portraitArrangement(Width: geometry.size.width, Height: geometry.size.height)
}
else
{
landscapeArrangementRightHanded(Width: geometry.size.width, Height: geometry.size.height)
}
}
}
}
else // LANDSCAPE
{
if UIScreen.main.traitCollection.userInterfaceIdiom == .phone
{
if settings.isLeftHanded == YES
{
landscapeArrangementLeftHanded(Width: geometry.size.width, Height: geometry.size.height)
}
else
{
landscapeArrangementRightHanded(Width: geometry.size.width, Height: geometry.size.height)
}
}
else if UIScreen.main.traitCollection.userInterfaceIdiom == .pad
{
if settings.isLeftHanded == YES
{
if hSizeClass == .compact
{
portraitArrangement(Width: geometry.size.width, Height: geometry.size.height)
}
else
{
landscapeArrangementLeftHanded(Width: geometry.size.width, Height: geometry.size.height)
}
}
else
{
if hSizeClass == .compact
{
portraitArrangement(Width: geometry.size.width, Height: geometry.size.height)
}
else
{
landscapeArrangementRightHanded(Width: geometry.size.width, Height: geometry.size.height)
}
}
}
}
}
}
}
@ViewBuilder func portraitArrangement(Width width: CGFloat, Height height: CGFloat) -> some View
{
VStack
{
CalculationTabView(selectedItem: $selectedItem)
.frame(width: width, height: 0.6 * height)
NumberPadView()
.frame(width: width, height: 0.4 * height)
}
}
@ViewBuilder func landscapeArrangementLeftHanded(Width width: CGFloat, Height height: CGFloat) -> some View
{
HStack
{
NumberPadView()
.frame(width: 0.4 * width, height: height)
CalculationTabView(selectedItem: $selectedItem)
.frame(width: 0.6 * width, height: height)
}
}
@ViewBuilder func landscapeArrangementRightHanded(Width width: CGFloat, Height height: CGFloat) -> some View
{
HStack
{
CalculationTabView(selectedItem: $selectedItem)
.frame(width: 0.6 * width, height: height)
NumberPadView()
.frame(width: 0.4 * width, height: height)
}
}
}
CalculationTabView
struct CalculationTabView: View
{
private let id : UUID = UUID()
@State private var numberOfCalculations : Int = 9 // Indexed from 0
@Binding public var selectedItem : Int
private let width : CGFloat = 64.0
private let arrayOfColors : [Color] = [Color.pink, Color.mint, Color.purple, Color.cyan, Color.yellow, Color.teal,
Color.red, Color.blue, Color.green, Color.gray, Color.indigo, Color.white]
private let arrayOfText : [Text] = [Text("One"), Text("Two"), Text("Three"), Text("Four"), Text("Five"),
Text("Six"), Text("Seven"), Text("Eight"), Text("Nine"), Text("Ten")]
var body: some View
{
HStack
{
VStack
{
VerticalSelectableTabBar(numberOfItems: $numberOfCalculations, selectedIndex: $selectedItem, content: arrayOfText)
.frame(width: width)
}
arrayOfColors[selectedItem]
.padding(.top, 20)
.padding(.trailing, 10)
}
}
}