如何禁用SwiftUI的默认行为?

时间:2019-08-26 13:51:14

标签: ios swiftui

SwiftUI使构建声明性UI变得非常容易。但是,有时他们会假定不一定是我们想要的默认值。

示例:

在列表行中添加两个按钮时,SwiftUI会自动使整个行变为可触摸状态,并且在点击行时都会调用这两个按钮的动作。这是他们的WWDC视频中演示的默认行为。

但是我不希望这种行为。我希望两个按钮都能正常工作,并且该行不可轻按。

问题:

我们如何告诉鳄梨酱专家(使用WWDC参考)停止假设我希望我的清单(或任何其他行为)如何工作?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果不需要List的默认行为,则可以使用VStack

struct ContentView: View {
    var body: some View {
        VStack {
            Button(action: {
                print("foo")
            }) {
                Image(systemName: "photo")
            }
            Button(action: {
                print("bar")
            }) {
                Image(systemName: "photo")
            }
        }
    }
}

但是,如果确实需要List,则可以通过编写自定义ListStyle对其进行自定义。

(也请看一下这个问题:How to change ListStyle in List。)

看来SomethingStyle protocol是Apple希望开发人员用来修改本机SwiftUI元素/行为的方式。另一个示例是ButtonStyleTextFieldStyle,等等。

答案 1 :(得分:1)

我的印象是Apple希望执行其样式准则。另外,要在@backslash -f答案中添加内容,您也可以只使用a而不是列表,这将给您类似的效果并允许更多的自定义。

Lines <- "name           members
x1            A,B,N,K,Y,G
x2            J,L,M,N,T
x3            G,H,S,J,D,F
x4            J,K,H,F,H,D,L"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)

另一种尝试的方法是将struct doubleList: View { var body: some View { VStack{ ForEach(1 ..< 10) {index in Button(action: { print("foo") }) { Image(systemName: "photo") } } } } } 包裹到UITableView中并尝试以这种方式启用按钮

似乎可以通过使用点击手势来解决此问题

UIViewRepresentable