SwiftUI-是否可以在Text()中添加嵌入式按钮?

时间:2019-12-16 15:34:23

标签: swiftui string-concatenation

试图实现类似于tinder的条款和条件,但是我无法弄清楚如何在快速UI中使条款和隐私政策可点击

Terms and conditions Text view screenshot

通过创建帐户或登录,您同意我们的条款隐私权政策

var body: some View {
        Text(Constants.privacyText)
        .applyCustomLabelTextProperties(size: size, kerning: 2)
        .foregroundColor(color)
//        .lineLimit(2)
        +
        Text(" ")
        +
        Text(Constants.terms).underline()
            .foregroundColor(color)
//            .onTapGesture {
//                print("test")
//            }
        +
        Text(" and ")
            .foregroundColor(color)
        +
        Text(Constants.privacyPolicy).underline()
            .foregroundColor(color)
    }
}

试图将一个可单击的.onTapGesture应用于Text(),还尝试添加一个按钮并将其连接到文本中,也没有成功

谢谢 丹

3 个答案:

答案 0 :(得分:1)

已经太迟了,但是如果这对某人有帮助,那么我很高兴:)

尝试一下,

var body: some View {
        VStack {
            Text("By creating an account you agree to our ")
            HStack {
                Button(action: { }){ Text("Terms").underline() }
                Text(" and ")
                Button(action: { }){ Text("Privacy Policy").underline()}
            }
        }
    }

结果:

enter image description here

答案 1 :(得分:0)

一种简单的方法:

 Text("By creating an account you agree to our ")
 Button(action: { self.openPrivacyPage()}){ Text("Privacy Policy")}
  .buttonStyle(BorderlessButtonStyle())

您可以使用字体大小/类型等进一步设置文本和按钮的样式。使用HStack保持在同一行。

这将导致:

text with inline

答案 2 :(得分:0)

问题是当您有一个动态文本时,整个段落的中间应该是可轻敲的图像或文本,而不是总是在同一位置。 让我们假设您有一个动态导入的文本,并放置在视图上的某个位置。而您想使一个有趣的单词发光,并使其可轻敲以给出含义或其他内容。我尚未发现可以在SwiftUI中做到这一点。

let firstHalfOfParagraph = Text($importedStringBeforeWord)
let secondHalfOfParagraph = Text($importedStringAfterWord) 
let word = Text($importedWord)
return firstHalfOfParagraph + word.onTapGesture{print("action")} + secondHalfOfParagraph

这永远都行不通,因为单词现在是AnyView而不是Text,并且无法与Text串联!因此陷入了困境。