如何在WatchOS6的SwiftUI中获取涂鸦输入

时间:2019-11-18 05:24:15

标签: xcode button user-input swiftui watchos-6

我正在尝试做到这一点,以便当用户单击内部带有评论的按钮时,它会弹出并带有乱七八糟的用户输入和命令。我查看了其他解决方案,但无法使它们中的任何一个起作用。我认为这可能是因为它们都是在watchOS3中实施的建议。我还查看了Apple文档,发现了这个https://developer.apple.com/documentation/watchkit/wkinterfacecontroller/1619527-presenttextinputcontroller,但无法使其正常工作。我在下面有完整的代码

import SwiftUI
import Foundation

struct ContentView: View {
    @State var counterValues = [0,0,0, -1, -1, -1, -1, -1, -1, -1 ]
    @State var counterNames = ["Pullups", "Pushups", "Situps", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
    @State var counters = 3;

    var body: some View {
       ScrollView {       
            VStack {
                ForEach( counterValues.indices ) { index in
                    if (self.counterValues[index]>=0) {
                        Text("\(self.counterNames[index])")
                        Button(action: {
                            self.counterValues[index] += 1
                        }) {
                            Text("\(self.counterValues[index])")
                                .font(.title)
                                .multilineTextAlignment(.center)
                        }
                    }
                }

                Button(action: {                   
                       //Add user input here
                }) {
                    Image(systemName: "plus")
                        .font(.largeTitle)
                        .foregroundColor(.green)
                }
                .cornerRadius(40)
                    .shadow(color: .gray, radius: /*@START_MENU_TOKEN@*/10/*@END_MENU_TOKEN@*/ )
                    .padding(20)

            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

这是特定的按钮,当我单击该按钮时,我希望它允许用户输入,然后将该输入存储在变量中

                Button(action: {
                    //Add user input here
                }) {
                    Image(systemName: "plus")
                        .font(.largeTitle)
                        .foregroundColor(.green)
                }
                .cornerRadius(40)
                    .shadow(color: .gray, radius: /*@START_MENU_TOKEN@*/10/*@END_MENU_TOKEN@*/ )
                    .padding(20)

1 个答案:

答案 0 :(得分:0)

您可以在文本字段中尝试以下代码。

           struct ContentView: View {

            @State
               var counterValues = [0,0,0, -1, -1, -1, -1, -1, -1, -1 ]
               @State var counterNames = ["Pullups", "Pushups", "Situps", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
               @State var counters = 3;
               @State var textInput = "";
               @State var showInput = false;
               var body: some View {



                   ScrollView {


                       VStack {



                           ForEach( counterValues.indices ) { index in
                               if (self.counterValues[index]>=0) {

                           Text("\(self.counterNames[index])")
                           Button(action: {
                               self.counterValues[index] += 1
                           }) {
                               Text("\(self.counterValues[index])")
                               .font(.title)
                               .multilineTextAlignment(.center)
                           }
                               }
                       }

                           Button(action: {


                                  //Add user input here
                            self.showInput.toggle()

                               }) {
                                   Image(systemName: "plus")
                                   .font(.largeTitle)
                                   .foregroundColor(.green)


                               }
                               .cornerRadius(40)

                           .shadow(color: .gray, radius: /*@START_MENU_TOKEN@*/10/*@END_MENU_TOKEN@*/ )

                           .padding(20)
                        if self.showInput{
                            TextField.init("input", text: $textInput)}

                    }
               }
               }
            }