Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何确定当前是否在SwiftUI中选择了视图_Ios_Swift_Swiftui - Fatal编程技术网

Ios 如何确定当前是否在SwiftUI中选择了视图

Ios 如何确定当前是否在SwiftUI中选择了视图,ios,swift,swiftui,Ios,Swift,Swiftui,我想知道我的视图当前是否被选中。 我有一个代表卡片的矩形。一旦我点击卡片,卡片就会进入选中状态并更改属性,如颜色 但一旦我点击其他地方,卡就不应该再处于那种状态了 到目前为止,当我尝试使用ontapsignate属性时,我没有设法解决这个问题,但是我遇到了一个问题,当我点击卡的外部时,卡不会将状态更改为false,除非我再次点击卡,这是有意义的,但在这种情况下,这似乎是错误的选择 导入快捷界面 结构卡视图:视图{ @选择的状态变量=false 设矩形=矩形() @状态变量矩形颜色:颜色=.pur

我想知道我的视图当前是否被选中。 我有一个代表卡片的矩形。一旦我点击卡片,卡片就会进入选中状态并更改属性,如颜色

但一旦我点击其他地方,卡就不应该再处于那种状态了

到目前为止,当我尝试使用
ontapsignate
属性时,我没有设法解决这个问题,但是我遇到了一个问题,当我点击卡的外部时,卡不会将状态更改为false,除非我再次点击卡,这是有意义的,但在这种情况下,这似乎是错误的选择

导入快捷界面
结构卡视图:视图{
@选择的状态变量=false
设矩形=矩形()
@状态变量矩形颜色:颜色=.purple
var body:一些观点{
GeometryReader{g in
自选矩形
.foregroundColor(自矩形颜色)
.框架(宽度:g.size.width/2,高度:g.size.width/2)
.ontapsigne{
self.selected.toggle()
self.modifyColors()
}
}
}
func modifyColors(){
如果选择{
矩形颜色=.red
}否则{
矩形颜色=.purple
}
}
}
选定状态为红色,未选定状态为紫色。 因此,我希望当我点击矩形时,颜色变为红色,但如果我点击矩形外部,则颜色不会变为红色。 只有在我点击矩形外部而不是内部时,它才会再次变为紫色。 卡片是紫色的。我选择它,它会变成红色。当我再次点击它时,它应该保持红色。当我点击卡外而不是卡内的某个位置时,它应该只变成紫色(未选中)


包含此矩形的视图:

导入快捷界面
结构ContentView:View{
var body:一些观点{
CardView()
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView()
}
}

视图实际在哪里并不重要,我想知道视图周围的空间是否被利用。因此,如果它位于模态或ZStack上的俯视图中,行为应该是相同的。

实现这一点的方法是让父视图同时管理选择和手势

CardView只需将@绑定到isSelected并相应更改颜色:

struct CardView: View {

    @Binding var isSelected: Bool

    var body: some View {
        Rectangle()
            .fill(self.isSelected ? Color.red : Color.purple)
            .aspectRatio(1.0, contentMode: .fit)
    }
}
而父节点管理@State并使用手势更新它

struct ContentView: View {

    @State var isCardSelected = false

    var body: some View {
        ZStack {
            Color.white
                .onTapGesture {
                    self.isCardSelected = false
                }
            CardView(isSelected: $isCardSelected)
                .onTapGesture {
                    self.isCardSelected = true
                }
        }
    }
}

您必须在包含卡片的视图中实现选择的手势。然后,行为仍然与以前相同。我编辑了我的初始答案,希望问题变得更清楚。你能把包含CardView的视图也包括进来吗?是的。但事实上,如果它在内容视图或模式中等中,则不会有任何区别。非常感谢您的帮助:)