SwiftUI极简教程15:使用Toggle开关、Picker选择器Stepper步进器构建一个Form表单

简介: SwiftUI极简教程15:使用Toggle开关、Picker选择器Stepper步进器构建一个Form表单

在本章中,你将学会使用Form构建简单的表单,并同步学习Picker选择器、Toggle开关、Stepper步进器等简单组件的使用。

在iOS应用中,特别是待办事项、笔记类App,B端App用户注册、账号登录等页面,我们常常可以看到需要用户填写的表单。

在系统设置中,我们也可以看到由Form表单构建的页面:

image.png

在之前的章节中,我们使用List构建了简单的列表,那么List构建列表和Form构建表单有什么异同点呢?

相同点:List列表和Form表单都是SwiftUI对UITableView的一个封装,在实现的机理基本上是一样的。

不同点:Form比较List,样式只有一,List 可以有几种样式,List上可以直接使用快捷数据源遍历,Form需要配合ForEach才能达到相同的效果。

本章节将分成4个部分讲解。


1、构建简答的Form表单;

2、Toggle开关;

3、Picker选择器;

4、Stepper步进器;


那么,让我们开始吧!


第一部分:构建简答的Form表单


首先,我们先创建一个新项目,命名为SwiftUIForm。

image.png

我们以iPhone的系统设置页面为例,尝试完成下面的页面:

image.png

首先我们先做一个标题,这里使用NavigationView,当然还有居中的标题。


NavigationView {
    //内容
    Text("Hello, world!")
        .padding()
        //导航栏标题
        .navigationBarTitle("通用", displayMode: .inline)
}

image.png

Form表单的用法和List基本一致,用Form将需要展示的内容包裹起来。

Form的基础用法:


Form {
    Section() {
       //需要展示的内容
    }
}
复制代码


Section是分段的意思,一个Section代表一个段落。

我们使用Form表单将文字内容包裹起来,看看效果。

image.png

就这样,我们得到了一个有一个段落的表单内容。

那么我们和UI稿一样,分成几个Section段落,然后也同步修改Text的文字内容。

于是我们就得到了系统设置基本一致的页面。

image.png

就这样,我们完成了一个基础Form的创建。

是不是很简单。

再科普一个知识点,像下面“自动更新”的页面,我们发现在整个Section段落后有“跟随”的文字。

image.png

这个可不是用Text加到body外面,而是可以通过Section段落自己的参数设置的。

Section段落可以设置它的表头文字,和表尾文字。

设置的方法如下:


Section(header: Text(“我是表头文字”),footer: Text(“我是表尾文字”)) {
    //需要展示的内容
}


这里我们只用到了Section段落尾巴的文字。

那可以只使用footer,删掉整个header内容。

代码如下:


// 表单
Form {
    Section(footer: Text("下载后在夜间自动安装软件更新。更新安装前您会收到通知。iPhone 必须为充电状态并接入 Wi-Fi以完成更新。")) {
        // 需要展示的内容
        Text("下载iOS更新")
        Text("安装iOS更新")
    }
}

image.png

第二部分:Toggle开关


承接上面第一部分的内容。

在自动更新的页面,我们可以看到Text("下载iOS更新”)、Text("安装iOS更新")右边都有一个开关。

Toggle开关的创建方法也很简单,首先我们需要初始化定义Toggle开关的状态,默认为关闭false。


@State var isDownload = false    //是否下载
@State var isInstall = false    //是否安装
复制代码


然后是Section段落里每一个文字都有一个开关,我们将Toggle包裹住Text。

同时要绑定开关的状态。


Toggle(isOn: $isDownload) {
    Text("下载iOS更新")
}
Toggle(isOn: $isInstall) {
    Text("安装iOS更新")
}
复制代码


于是乎,我们就完成了Toggle开关的创建。

点击模拟器的Preview按钮,点击下开关,可以发现我们实现了开关的切换了。


image.png

第三部分:Picker选择器


在使用Form表单的时候,特别是在B端的App,经常会遇到一个业务场景。

用户在设置的时候,需要修改一项配置。

以下图iOS的隔空投送为例:

image.png

我们先完成基础的页面样式。

完整代码如下:

NavigationView {
    // 表单
    Form {
        Section {
            Text("隔空投送")
        }
    }
    // 导航栏标题
    .navigationBarTitle("通用", displayMode: .inline)
}

image.png

下面,我们分析下内容:

点击隔空投送,我们进入一个新页面,可以选择“接收关闭”、“仅限联系人”、“所有人”。

这里,我们就可以使用Picker选择器来完成这个操作。

首先,我们需要先定义好需要可选项的内容,我们用一个私有private的数组displayState来表示。


private var displayState = [ "接收关闭", "仅限联系人", "所有人"]


数组的名称可以自定义,这里用的displayState是“显示状态”的意思。

当然,数组是开放使用public公开的,还是private私有的,根据实际业务来定。

我们还需要声明一个状态变量来存储用户选择的选项。


@State private var selectedNumber = 0


这里的0,代表的是选中的第一个选项。

如果displayState数组是三个可选项,那么它的选择对应的是0、1、2。

接下来,我们尝试构建Picker选择器,代码如下:


Picker(selection: $selectedNumber, label: Text("隔空投送")) {
    //选择器可选项内容
}


image.png

点击模拟器的Preview按钮,我们可以体验到选择器的效果。

点击“隔空投送”,会进入一个新页面。

image.png

但我们看到页面里面是空的,这是因为Picker选择器选择的内容我们还没有构建。

在之前我们已经定一个一个状态的数组displayState。

private var displayState = [ "接收关闭", "仅限联系人", "所有人"]

接下来我们需要在Picker选择器选择的内容里遍历出内容来。

遍历数组内容的方法我们可以用之前学习过的ForEach循环的方法。

遍历数组数据为0~displayState数组内数组的数量count,id使用数组本身,文字展示使用$绑定数组值;

//选择器可选项内容
ForEach(0 ..< displayState.count, id: \.self) {
    Text(self.displayState[$0])
}

image.png

运行模拟器看看,我们已经实现了Picker选择器的效果。

完整代码如下:

import SwiftUI
struct ContentView: View {
    private var displayState = [ "接收关闭", "仅限联系人", "所有人"]
    @State private var selectedNumber = 0
    var body: some View {
        NavigationView {
            // 表单
            Form {
                Section {
                    Picker(selection: $selectedNumber, label: Text("隔空投送")) {
                        //选择器可选项内容
                        ForEach(0 ..< displayState.count, id: \.self) {
                            Text(self.displayState[$0])
                        }
                    }
                }
            }
            // 导航栏标题
            .navigationBarTitle("通用", displayMode: .inline)
        }
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


image.png


第四部分:Stepper步进器


下面我们再学习一种在Form表单中很常见使用的组件,叫做Stepper步进器。

可能我们最常见到它应该是在一些电商平台上,或者外卖平台。

我们选中一个商品加入购物车中,此时的商品数量为1件,我们通过点击增加或者减少按钮,来修改商品数量。

这个点击增加和减少的操作,在swiftui中,就是Stepper步进器。

首先,我们需要定义一个Stepper步进器初始值,比如从1开始。


@State private var amount = 1
复制代码


然后承接上面Picker选择器的内容,我们再建立一个Section段落,用来放置Stepper步进器代码。


//构建步进器
Stepper(onIncrement: {
    //点击+号时做什么操作
   }, onDecrement: { 
    //点击-号时做什么操作
}) {
    //步进器内容部分
}
复制代码


我们简单给Stepper步进器写一些逻辑:

Stepper步进器初始值为1;

当我们点击”+”时,amount数值+1;

然后设置最大值为99,超过99,就不能再加了;

当我们点击”-“时,amount数值-1;

然后设置最小值为1,小于1,就不能再减少了;

实现代码如下:


//步进器
Stepper(onIncrement: {
    self.amount += 1
    if self.amount > 99 {
        self.amount = 99
    }
}, onDecrement: {
    self.amount -= 1
    if self.amount < 1 {
        self.amount = 1
    }
}) {
    //步进器文字
    Text("\(amount)")
}


image.png

恭喜你!完成了本章关于Form表单的学习!

内容可能有点多,需要点时间吸收。

快来动手试试吧!

相关文章
|
5月前
|
前端开发
CSS 实现动态显示隐藏(:checked 和 :target 的妙用)
CSS 实现动态显示隐藏(:checked 和 :target 的妙用)
40 0
element-ui框架的el-dialog弹出框被遮罩层挡住了/el-drawer....会生成v-model元素的组件被遮罩层挡住
element-ui框架的el-dialog弹出框被遮罩层挡住了/el-drawer....会生成v-model元素的组件被遮罩层挡住
457 1
55zTree - 配合 checkbox 的隐藏
55zTree - 配合 checkbox 的隐藏
33 0
|
前端开发
Concis组件库封装——CheckBox多选框/多选组
Concis组件库封装——CheckBox多选框/多选组组件封装
120 1
Concis组件库封装——CheckBox多选框/多选组
|
JavaScript 索引
jquery 获取或设置radio单选框选中值的方法
jquery 获取或设置radio单选框选中值的方法
648 0
|
JavaScript
Vue antdv dropdown 自定义下拉内容 overlay 禁止点击事件下传导致收起
Vue antdv dropdown 自定义下拉内容 overlay 禁止点击事件下传导致收起
363 0
|
JavaScript
jquery 使用attr方法对checkBox进行全选和反选操作
一次点击按钮进行全选的时候,checkbox全部选中;再次点击的时候,checkbox取消选中。 第二次,第三次,之后再点击,没有效果,代码也执行。checkbox的checked属性也改变,但是checkbox就是没有 被选中。问题解决办法是把红色部分中的attr方法修改
140 0
|
JavaScript 小程序 Android开发
讲述小程序之组件picker(从底部弹起的滚动选择器)
讲述小程序之组件picker(从底部弹起的滚动选择器)
378 0
讲述小程序之组件picker(从底部弹起的滚动选择器)
|
JavaScript 前端开发
【JavaScript】一个按钮控制显示隐藏(toggle)
【JavaScript】一个按钮控制显示隐藏(toggle)
126 0
【JavaScript】一个按钮控制显示隐藏(toggle)
|
C#
用 Expression Blend 创建酷炫的 Button
原文:用 Expression Blend 创建酷炫的 Button 原文:Creating “Cool” Buttons with Expression Blend Author: Alex 在本文中,我们将考虑在Expression Blend用几种方法来创建酷炫的凝胶状按钮。
1143 0

热门文章

最新文章