Как передать строку в дочерний вид? - PullRequest
1 голос
/ 18 февраля 2020

Я хочу передать текст в textBox дочернему представлению и создать там прокручиваемую кнопку. Что касается выходного состояния, мы надеемся, что «a ~ c» расположены вертикально и каждый из них является кнопкой.

struct ContentView: View {
  var textBox = ["a","b","c"]
  var body: some View {
    VStack {
      ScrollView(.vertical, showsIndicators: false) {
        ForEach(0..<textBox.count) { number in
          ScrollText(text: self.textBox[number].lowercased())
        }
      }
    }
  }
}

struct ScrollText: View {
  @Binding  var text: String
  @State private var flag: Bool = false

  var body: some View {
    Button(action: {
      self.flag.toggle()
    }) {
      Text(text)
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Если вы собираетесь оставить ScrollText нетронутым, здесь возможны модификации в ContentView, который использует его

struct ContentView: View {
  @State private var textBox = ["a","b","c"] // < make State, so modifiable
  var body: some View {
    VStack {
      ScrollView(.vertical, showsIndicators: false) {
        ForEach(0..<textBox.count) { number in
          ScrollText(text: self.$textBox[number]) // < pass Binding as intended
        }
      }
    }
  }
}
0 голосов
/ 18 февраля 2020

Я не совсем понимаю, в чем проблема или что вы хотите, но я решил некоторые ошибки компилятора в вашем коде, и он показывает три кнопки, как и ожидалось:

struct ContentView : View {
  var textBox = ["a","b","c"]
  var body: some View {
    VStack {
      ScrollView(.vertical, showsIndicators: false){
        ForEach(textBox, id: \.self) { letter in
          ScrollText(text: letter)
        }
      }
    }
  }
}

struct ScrollText: View {
  var text: String
  @State private var flag: Bool = false

  var body: some View {
    Button(action: {
      self.flag.toggle()
    }, label: {
      Text(text)
    })
  }
}

Ваш вопрос был о том, как передать строку, поэтому вам не нужно @Binding для этого. Просто передайте строку:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...