小编Jac*_*Dev的帖子

是否可以在 SwiftUI 中将 Button<Text> 添加到 Text 中?

通常,添加两个文本视图将生成一个保留每个单独文本视图属性的文本视图。例如:

\n\n
Text(\xe2\x80\x9cHello \xe2\x80\x9d) + Text(\xe2\x80\x9cworld!\xe2\x80\x9d).foregroundColor(.blue)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这应该会产生Hello world!, 为world!蓝色。world!现在,如果我想要可点击并充当按钮,我该怎么办?好吧,从逻辑上讲,这样做是有意义的:

\n\n
Text(\xe2\x80\x9cHello \xe2\x80\x9d) + Button(action: {}) { Text(\xe2\x80\x9cworld!\xe2\x80\x9d).foregroundColor(.blue) }\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,上面的代码无法编译。是否可以按照描述创建具有可点击部分的文本视图?我的使用 cas 用于带有@提及或#\xc2\xa0hashtags 的推文,您可以点击提及或主题标签以显示详细视图。

\n\n

编辑:在 HStack 中使用文本视图和按钮不合适的原因是因为这是在一个为推文内容返回文本视图的函数内:

\n\n
func styledText(text: String) -> Text {\n    var output = Text("")\n    let components = text.tokenize("@#. ")\n    for component in components {\n        if component.rangeOfCharacter(from: CharacterSet(charactersIn: "@#")) != nil {\n            output = output + Text(component).foregroundColor(.accentColor)\n        } else {\n            output = output + Text(component)\n …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

8
推荐指数
1
解决办法
3987
查看次数

删除行时SwiftUI ForEach索引超出范围错误

我有一个ForEach块和一个Stepper嵌入在List视图中。List视图第一部分的内容如下:

ForEach(record.nodes.indices, id: \.self) { index in
    HStack {
        TextField("X", text: self.$record.nodes[index].xString)
        Spacer()
        Divider()
        TextField("Y", text: self.$record.nodes[index].yString)
        Spacer()
    }
}
Stepper("± node", onIncrement: {
    self.record.nodes.append(Node(x: 0, y: 0))
}, onDecrement: {
    self.record.nodes.removeLast()
})
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,在调用 时self.record.nodes.removeLast(),应用程序因Index out of range错误而崩溃。我一直试图解决这个问题几个小时,但无济于事。

我最初使用onDelete,但是产生了同样的问题。

该项目可以在https://github.com/jacobcxdev/Timekeeper找到,此错误发生在RecordDetailView.swift 中

ios swift swiftui

8
推荐指数
2
解决办法
4329
查看次数

标签 统计

swift ×2

swiftui ×2

ios ×1