通常,添加两个文本视图将生成一个保留每个单独文本视图属性的文本视图。例如:
\n\nText(\xe2\x80\x9cHello \xe2\x80\x9d) + Text(\xe2\x80\x9cworld!\xe2\x80\x9d).foregroundColor(.blue)\nRun Code Online (Sandbox Code Playgroud)\n\n这应该会产生Hello world!, 为world!蓝色。world!现在,如果我想要可点击并充当按钮,我该怎么办?好吧,从逻辑上讲,这样做是有意义的:
Text(\xe2\x80\x9cHello \xe2\x80\x9d) + Button(action: {}) { Text(\xe2\x80\x9cworld!\xe2\x80\x9d).foregroundColor(.blue) }\nRun Code Online (Sandbox Code Playgroud)\n\n但是,上面的代码无法编译。是否可以按照描述创建具有可点击部分的文本视图?我的使用 cas 用于带有@提及或#\xc2\xa0hashtags 的推文,您可以点击提及或主题标签以显示详细视图。
编辑:在 HStack 中使用文本视图和按钮不合适的原因是因为这是在一个为推文内容返回文本视图的函数内:
\n\nfunc 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) 我有一个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 中。