SwiftUI组件大全

Text组件:用于显示文本内容

示例1:Text("Hello, World!"),显示"Hello, World!"文本
示例2:Text("Your score is (score)"),显示带变量的文本,其中score是一个整数变量

SecureField组件:用于输入敏感信息(例如密码)的文本框

示例1:SecureField("Password", text: $password),创建一个带有“Password”标签的安全文本框,用户可以在其中输入密码。此示例中的$password是一个绑定变量,它将保存用户输入的密码。
示例2:SecureField("", text: $password).textFieldStyle(RoundedBorderTextFieldStyle()), 创建一个带有圆角边框样式的安全文本框,没有标签,用户可以在其中输入密码。这个例子展示了如何使用textFieldStyle()方法来应用自定义文本框样式。

Label组件:用于将标签与内容组合在一起

示例1:Label("Save", systemImage: "square.and.arrow.down"), 创建一个带有系统图像“square.and.arrow.down”的标签,“Save”是标签的文本内容。
示例2:Label { Text("Edit") Text("Document") } icon: { Image(systemName: "doc") }, 创建一个标签,其中包含文本“Edit”和“Document”,以及系统图像“doc”。

Image组件:用于显示图像

示例1:Image("example"),显示名为"example"的本地图像
示例2:Image("[https://xxx.jpg"),显示远程图像,其中"https://xxx.jpg"是图像的URL

AsyncImage:用于异步加载图像的视图

示例1:AsyncImage(url: URL(string: "[https://example.com/image.png](https://example.com/image.png)"), placeholder: { Text("Loading ...") }, image: { Image(uiImage: $0).resizable() }), 创建一个异步图像视图,用于加载指定URL的图像。在图像加载完成之前,将显示一个“Loading ...”文本视图。
示例2:AsyncImage(url: URL(string: "[https://example.com/image.png](https://example.com/image.png)"), transaction: Transaction(animation: .spring())) { phase in switch phase { case .empty: ProgressView() case .success(let image): image.resizable() case .failure(_): Image(systemName: "exclamationmark.icloud.fill") } }, 创建一个异步图像视图,用于加载指定URL的图像。这个例子中的视图是可变的,并在加载过程中显示进度视图。如果加载失败,将显示一个带有感叹号的图标。

Button组件:用于创建交互式按钮

示例1:Button("Click me!") { print("Button clicked!") },创建一个按钮,当按钮被点击时,输出"Button clicked!"
示例2:Button(action: startGame) { Text("Start game") },创建一个按钮,当按钮被点击时调用startGame函数,并显示"Start game"文本

EditButton:一个按钮,用于触发编辑模式,可以在此模式下编辑列表和其他视图

示例1:NavigationView { List { ForEach(items) { item in Text(item) }.onDelete(perform: delete) } .navigationBarTitle("Items") .navigationBarItems(trailing: EditButton()) }, 使用EditButton将列表视图转换为可编辑模式,并将其放置在导航栏的右侧。
示例2:VStack { Text("Hello, world!") Spacer() EditButton() }, 在一个垂直的StackView中使用EditButton,以便用户可以通过点击该按钮将其放置在可编辑模式下。

TextField组件:用于接受用户输入的文本

示例1:TextField("Enter your name", text: $name),创建一个文本框,让用户输入他们的名字,并将输入的文本存储在名为name的变量中
示例2:TextField("Enter your password", text: $password).textFieldStyle(RoundedBorderTextFieldStyle()),创建一个带有圆角边框的文本框,让用户输入他们的密码,并将输入的文本存储在名为password的变量中

Toggle组件:用于创建开关按钮

示例1:Toggle("Toggle me", isOn: $toggleValue),创建一个带有标签的切换按钮,并将其状态存储在名为toggleValue的布尔变量中
示例2:Toggle(isOn: $isDarkMode) { Text("Dark mode") },创建一个切换按钮,当按钮被打开时,应用程序进入暗模式,并显示"Dark mode"文本

Slider组件:用于创建滑块

示例1:Slider(value: $sliderValue, in: 0...10),创建一个滑块,将其值存储在名为sliderValue的变量中,并将其范围设置为0到10
示例2:Slider(value: $fontSize, in: 12...24, step: 2) { Text("Font size: (fontSize)") },创建一个滑块,当滑块的值改变时,将字体大小存储在名为fontSize的变量中,并显示"Font size: xx"文本,其中xx是字体大小的值

NavigationView组件:用于创建具有导航功能的视图

示例1:NavigationView { Text("Hello, World!") },创建一个带有"Hello, World!"文本的视图,并添加导航功能
示例2:NavigationView { List(items) { Text($(item) } },创建一个带有列表视图的导航视图,其中items是一个包含多个项目的数组,每个项目都会显示为列表中的一个行文本。

VStack和HStack组件:用于垂直和水平布局子视图

示例1:VStack(alignment: .leading, spacing: 10) { Text("Title") Text("Subtitle") },创建一个垂直堆栈,其中包含标题和副标题文本,标题文本位于上方,副标题文本位于下方,两个文本之间的间距为10个点。
示例2:HStack { Image("icon") Text("Label") },创建一个水平堆栈,其中包含图像和标签文本,图像位于标签文本的左侧。

List组件:用于创建列表视图

示例1:List(items) { Text($0) },创建一个简单的列表视图,其中items是一个包含字符串的数组,每个字符串都会显示为一个列表行文本。
示例2:List(tasks) { task in TaskView(task: task) },创建一个包含多个任务视图的列表视图,其中tasks是一个包含多个任务对象的数组,TaskView是一个自定义的视图组件,用于显示单个任务。

Form组件:用于创建表单视图

示例1:Form { TextField("Name", text: $name) TextField("Email", text: $email) },创建一个包含姓名和电子邮件文本字段的简单表单视图。
示例2:Form { Toggle("Dark mode", isOn: $isDarkMode) Section(header: Text("Settings")) { TextField("Username", text: $username) TextField("Password", text: $password) } },创建一个包含切换按钮和用户名/密码输入的表单视图,切换按钮用于切换暗模式,用户名和密码输入包含在一个包含标题的部分中。

Alert组件:用于创建警报框视图

示例1:Button("Show Alert") { showAlert.toggle() } .alert(isPresented: $showAlert) { Alert(title: Text("Alert"), message: Text("This is an alert"), dismissButton: .default(Text("OK"))) },创建一个按钮,单击后显示一个带有标题,消息和一个“OK”按钮的警报框视图。
示例2:Alert(title: Text("Delete"), message: Text("Are you sure you want to delete this item?"), primaryButton: .destructive(Text("Delete")) { deleteItem() }, secondaryButton: .cancel()),创建一个带有警告消息,一个红色的“删除”按钮和一个“取消”按钮的警报框视图,用于在用户确认删除操作之前进行确认。

ActionSheet组件:用于创建操作表视图

示例1:Button("Show Action Sheet") { showActionSheet.toggle() } .actionSheet(isPresented: $showActionSheet) { ActionSheet(title: Text("Actions"), message: Text("Choose an action"), buttons: [.default(Text("Action 1")), .default(Text("Action 2")), .cancel()]) },创建一个按钮,单击后显示一个操作表视图,其中包含两个默认操作和一个“取消”按钮。
示例2:ActionSheet(title: Text("Share"), message: Text("Choose a sharing option"), buttons: [.default(Text("Share on Facebook")) { shareOnFacebook() }, .default(Text("Share on Twitter")) { shareOnTwitter() }, .default(Text("Share via Email")) { shareViaEmail() }, .cancel()]),创建一个带有标题和消息的操作表视图,其中包含三个不同的共享选项按钮和一个“取消”按钮。每个按钮上的操作会调用不同的分享函数。

TabView组件:用于创建带有多个标签页的视图

示例1:TabView { Text("Tab 1") .tabItem { Image(systemName: "star") Text("Tab 1") } Text("Tab 2") .tabItem { Image(systemName: "heart") Text("Tab 2") } },创建一个带有两个标签页的视图,每个标签页都包含一个文本视图和一个图标,用于切换不同的视图内容。
示例2:TabView(selection: $selectedTab) { ForEach(tabs) { tab in TabContentView(tab: tab) .tabItem { Image(tab.icon) Text(tab.title) } } },创建一个具有多个标签页的视图,其中每个标签页都具有自定义的图标和标题,并在选定标签页时显示对应的内容视图。

NavigationLink组件:用于在导航视图中创建可点击的链接

示例1:NavigationLink(destination: DetailView()) { Text("Go to Detail View") },创建一个可点击的链接,单击后将导航到名为“DetailView”的目标视图。
示例2:ForEach(items) { item in NavigationLink(destination: ItemDetailView(item: item)) { Text(item.name) } },创建一个带有多个链接的列表视图,每个链接都导航到一个名为“ItemDetailView”的目标视图,该视图显示有关该项的详细信息。

Picker:一个视图,用于在一个列表中显示一组选项,并允许用户选择其中一个选项。

示例1:Picker("Fruit", selection: $selectedFruit) { ForEach(fruits, id: .self) { Text($0) } },创建一个Picker,用于在一个水果列表中选择一个选项,并将选择的选项绑定到名称为“selectedFruit”的绑定变量中。 示例2:Picker(selection: $selectedColor, label: Text("Color")) { ForEach(colors, id: .self) { Text($0) } }.pickerStyle(.segmented),创建一个Picker,用于在一组颜色中选择一个选项,并将选择的选项绑定到名称为“selectedColor”的绑定变量中。使用.segmented样式使Picker的外观更改为分段控件样式。

DatePicker组件:用于创建日期选择器

示例1:DatePicker("Select a date", selection: $selectedDate, displayedComponents: .date),创建一个日期选择器,用户可以选择日期,该日期将存储在名为“selectedDate”的绑定变量中。
示例2:DatePicker("Select a time", selection: $selectedTime, displayedComponents: .hourAndMinute),创建一个时间选择器,用户可以选择时间,该时间将存储在名为“selectedTime”的绑定变量中。

Stepper组件:用于创建步进器视图

示例1:Stepper("Value: (value)", value: $value),创建一个步进器视图,用户可以单击“+”或“-”按钮来增加或减少值,该值将存储在名为“value”的绑定变量中。
示例2:Stepper(onIncrement: { incrementValue() }, onDecrement: { decrementValue() }) { Text("Value: (value)") },创建一个自定义的步进器视图,当用户单击“+”或“-”按钮时,分别调用两个不同的函数来增加或减少值,并在视图中显示当前值。

ProgressView组件:用于显示进度条或轮廓视图

示例1:ProgressView(),创建一个默认样式的进度条视图。
示例2:ProgressView("Loading..."),创建一个带有标签“Loading...”的进度条视图。

ScrollView组件:用于创建可滚动的视图

示例1:ScrollView { Text("Scrollable content") }

ColorPicker组件:用于创建颜色选择器

示例1:ColorPicker("Select a color", selection: $selectedColor),创建一个颜色选择器,当用户选择颜色时,将触发绑定变量“selectedColor”的值更改,并在选择器旁边显示标签“Select a color”。
示例2:ColorPicker(selection: $selectedColor, supportsOpacity: true),创建一个颜色选择器,支持选择不透明度,并且不显示标签。

VideoPlayer组件:用于在应用程序中播放视频

示例1:VideoPlayer(player: player) ,创建一个视频播放器,其中“player”是一个包含要播放的视频的AVPlayer实例。
示例2:VideoPlayer(player: player, controls: .custom(actions: { CustomControls() })),创建一个视频播放器,自定义播放器控件。

MapView组件:用于在应用程序中显示地图

示例1:MapView(coordinate: CLLocationCoordinate2D(latitude: 37.3318, longitude: -122.005)),创建一个地图视图,其中心点坐标为经度37.3318,纬度-122.005的位置。
示例2:MapView(coordinateRegion: $region),创建一个地图视图,其中心点坐标和缩放比例由绑定变量“region”控制。

Gauge:用于显示某个值相对于给定范围的百分比。它可以是一个圆形或者一个半圆形。

示例1:Gauge(value: progress, in: 0...100)。创建一个圆形的Gauge,用于显示进度百分比,progress是0到100之间的值,in参数表示Gauge的范围。
示例2:Gauge(value: progress, in: 0...100, label: { Text("(Int(progress))%") })。创建一个圆形的Gauge,用于显示进度百分比,progress是0到100之间的值,in参数表示Gauge的范围。同时,定义一个标签,用于在Gauge中心显示进度百分比。

Menu组件:用于创建菜单

示例1:Menu(content: { Text("Menu item 1") Text("Menu item 2") }, label: { Text("Menu") }),创建一个菜单,包含两个菜单项“Menu item 1”和“Menu item 2”,并在标签中显示文本“Menu”。
示例2:Menu(content: { Button("Delete") { delete() } }, trigger: .init(label: { Text("More") })),创建一个菜单,包含一个按钮“Delete”,单击后调用“delete”函数,并在标签中显示文本“More”。

Link组件:用于创建链接

示例1:Link("Open SwiftUI documentation", destination: URL(string: "[https://developer.apple.com/documentation/swiftui](https://developer.apple.com/documentation/swiftui)")!) ,创建一个链接,显示文本“Open SwiftUI documentation”,单击后打开目标URL地址。
示例2:Link(destination: URL(string: "[https://developer.apple.com/documentation/swiftui](https://developer.apple.com/documentation/swiftui)")!) { Text("Learn more about SwiftUI") },创建一个链接,显示文本“Learn more about SwiftUI”,单击后打开目标URL地址。

ShareLink:一个视图,用于共享链接或其他内容

示例1:Button(action: shareLink) { Text("Share Link") }, 在一个按钮中使用ShareLink来触发共享视图,并使用shareLink方法来定义共享内容。
示例2:ShareLink(destination: URL(string: "[https://www.example.com](https://www.example.com/)")!, label: { Text("Share Link") }), 使用ShareLink在视图中显示一个可共享的链接,并将该链接标记为标签。

WebView组件:用于显示Web内容

示例1:WebView(url: URL(string: "[https://www.apple.com")!),创建一个WebView组件,加载指定的URL。](https://www.apple.xn--com%22%29%21%29%2Cwebview%2Curl-qr76b28ac6nzm2a6zdy61h77xamo5auv0ms1rcb2uh./)
示例2:WebView(htmlString: "<h1>Hello, World!</h1>"),创建一个WebView组件,显示指定的HTML字符串。

Spacer组件:用于占用可用空间

示例1:HStack { Text("Left") Spacer() Text("Right") },创建一个水平栈视图,左边是文本“Left”,右边是文本“Right”,使用Spacer()占用中间可用的空间。
示例2:VStack { Text("Top") Spacer() Text("Bottom") },创建一个垂直栈视图,上面是文本“Top”,下面是文本“Bottom”,使用Spacer()占用中间可用的空间。

若还有没想到的组件,请在评论中告诉我,我继续完善

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容