是否可以编写返回文本视图 HStack 的 func、方法、结构、扩展、类?

Posted

技术标签:

【中文标题】是否可以编写返回文本视图 HStack 的 func、方法、结构、扩展、类?【英文标题】:Is it possible to write a func, method, struct, extension, class that returns a HStack of Text Views? 【发布时间】:2020-08-24 00:06:43 【问题描述】:

我想说我需要一个包含大量文本视图的 HStack,并让它们出现在我的内容视图正文中。 我得到的最接近的是: 我有一个名为 TextView.swift 的文件,代码如下:

import SwiftUI
 
struct TextView: UIViewRepresentable 
 
    @Binding var text: String
    @Binding var textStyle: UIFont.TextStyle
 
    func makeUIView(context: Context) -> UITextView 
        let textView = UITextView()
 
        textView.font = UIFont.preferredFont(forTextStyle: textStyle)
        textView.autocapitalizationType = .sentences
        textView.isSelectable = true
        textView.isUserInteractionEnabled = true
 
        return textView
    
 
    func updateUIView(_ uiView: UITextView, context: Context) 
        uiView.text = text
        uiView.font = UIFont.preferredFont(forTextStyle: textStyle)
     
  
// In content view:
struct ContentView: View 
    
    @State private var message = "this is my message in a bottle"
    @State private var textStyle = UIFont.TextStyle.body
    
    var body: some View 
        TextView(text: $message, textStyle: $textStyle)
            .padding(.horizontal)
        

我想要一个包含 15 个文本视图的 HStack,而不是文本视图。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以简单地编写一个函数来返回所需的视图。

struct ContentView: View 

    let numberOfTextViews = 15

    func getTextViews() -> some View 
        return HStack 
            ForEach(0..<self.numberOfTextViews, id: \.self) 
                index in
                Text("this is item \(index)")
                    .background(index % 2 == 0 ? Color.Red : Color.Blue)
            
        
    

    var body: some View 
        self.getTextViews()
        

【讨论】:

感谢 Mohammad Rahchamani,它工作得很好。只是一个小错字 ForEach(0.. 感谢 Mohammad Rahchamani,这有助于制作 1 个红色和下一个蓝色。这是另一个挑战:我有 255 个图块,即一个 15x15 的网格,我需要能够确定给定位置的图块颜色。我声明了这些变量: let Purple = Color.purple let pink = Color.pink let green = Color.green let blue = Color.blue let greenPos = [3,11,36,38,45,52] let bluePos = [20 ,24,76,80,64,88,136,140,​​144,148,200,204] let redPos = [0,7,14,105,119,210,217,224] let PurplePos = [16,28,32,42,48,56,64,70,154,160] 有可能还是我在做梦? 您可以添加一个函数以根据您的条件返回所需的背景。你应该发布另一个问题,我很乐意帮助你编写代码。

以上是关于是否可以编写返回文本视图 HStack 的 func、方法、结构、扩展、类?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:VStack 中 ForEach 中的 HStack 使多行文本重叠

全屏视图在 HStack 和水平滚动视图中不起作用

如何在 SwiftUI 中嵌入 ForEach 的 HStack 中设置相对宽度?

SwiftUI:在 Single 和 HStack 视图之间制作动画

SwiftUI之HStack和VStack的切换

SwiftUI之HStack和VStack的切换