项目档案

温度转换示例

我们的下一个例子是一个简单的计算器赢博体育程序,它将华氏温度转换为摄氏度。

在这个例子中,我们将要引入的主要新特性是TextFields的使用,它是允许用户在赢博体育程序中输入文本的组件。

以下是赢博体育程序唯一视图的源代码:

*/扩展视图{func hideKeyboard(){让辞职= #selector(UIResponder.resignFirstResponder) UIApplication.shared。sendAction(resign, to: nil, from: nil, for: nil)}} struct ContentView: View {@State var fahrenheitTemp: String = "68" @State var celsiusTemp: String = "20" var body: some View {VStack {TextField("",text:$fahrenheitTemp) .onChange(of:fahrenheitTemp) {ft in if let t = Double(ft) {let c = (t - 32.0)*5.0/9.0 celsiusTemp = String(format:"%.2f",c)}}. keyboardtype (. decimalpad).padding() Text("degrees Fahrenheit").font(.system(size:24)). foregroundcolor (.orange) Text("is").font(.system(size:24)). foregroundcolor (.orange) Text(celsiusTemp).padding() Text("degrees Celsius").font(.system(size:24)). foregroundcolor (.orange) .font(.system(size:24)). foregroundcolor (.orange)onTapGesture {hideKeyboard()}}} struct ContentView_Previews: PreviewProvider{静态var previews:一些View {ContentView()}}

使用文本字段

要在SwiftUI中创建文本字段,我们使用TextField()初始化器。这个初始化器接受两个参数:一些文本用作文本字段的标签,以及对将连接到文本字段的状态变量的引用。通过向文本字段提供一个状态变量的引用,我们保证用户在文本字段中键入的任何内容都将被复制到该状态变量中供我们使用。这使我们不必在某个地方的操作方法中编写逻辑,从文本字段中读取文本。

添加事件处理程序

文本字段是交互元素。为了响应文本字段中的用户输入,我们将把事件处理程序与文本字段关联起来。通过链接适当的“on”方法,将各种事件处理程序附加到元素上。在上面的程序中有两个这样的例子。

第一个示例是向文本字段添加一个事件处理程序,每当用户更改文本字段的内容时就调用该事件处理程序。这是一个onChange()处理程序。该方法的第二个参数(我们在这里作为末尾闭包实现)是一个lambda表达式,当字段中的文本发生变化时将调用该表达式。lambda表达式接受一个参数,即字段的新文本。在本例中,我使用lambda表达式将用户输入的华氏温度转换为我们存储在第二个状态函数中的摄氏温度。由于第二个状态变量将其值显示在视图更下方的文本标签中,因此对第二个状态变量的更改将自动显示在视图中。

注意,我们通常不需要为文本字段使用onChange()处理程序。更常见的安排是设置一个引用状态变量的文本字段,然后在视图的其他地方设置一个按钮,其操作方法将使用该状态变量执行某种计算。

事件处理程序的第二个例子是我用onTapGesture()方法添加到VStack中的一个轻拍手势识别器。为此,我使用了一个尾部闭包,该闭包通过调用一个方法来隐藏键盘,该方法的代码是我在互联网上找到的。这段代码是必要的,因为一旦用户开始与文本字段交互,与该文本字段关联的键盘就会弹出屏幕,有时很难让键盘再次消失。我在这里使用的解决方案是向包含文本字段的VStack添加一个tap处理程序。这样,当用户在VStack中点击文本字段之外的任何地方时,点击处理程序将被调用,这将再次隐藏键盘。