本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容。
Eul 是一款 SwiftUI & Combine 教程 App(iOS、macOS),以文章(文字、图片、代码)配合真机示例(Xcode 12+、iOS 14+,macOS 11+)的形式呈现给读者。笔者意在尽可能使用简洁明了的语言阐述 SwiftUI & Combine 相关的知识,使读者能快速掌握并在 iOS 开发中实践。
自定义 Modifier
SwiftUI 提供了许多内建的 Modifier(修饰器),我们可以方便地调用。但是系统提供的有一定的局限性,如果我们需要自定义 Modifier,该如何实现呢?
设想有如下需求场景:在某个用户的名字右边,如果他是 Vip,显示 Vip 标识,如果不是,显示开通会员的按钮。如果我们能自定义一个 isVip 这样的 Modifier 可以方便的调用和展示差异化视图,那该是极好的。
首先,我们要实现自定义的 Modifier,需要实现 ViewModifier 协议:
struct Vip: ViewModifier { let isVip: Bool func body(content: Content) -> some View { HStack { content if isVip { Text("Vip") .font(.caption).bold() .foregroundColor(.white) .padding(3) .background(Color.orange) .cornerRadius(3) } else { Button { // action } label: { Text("开通会员") .font(.caption) .foregroundColor(.white) .padding(5) .background(Color.blue) .clipShape(Capsule()) } .buttonStyle(BorderlessButtonStyle()) } } }}
.buttonStyle(BorderlessButtonStyle())
的作用是为了让按钮在列表中,只有按钮可以响应点击事件。
然后我们给 View 添加扩展:
extension View { func isVip(_ isVip: Bool) -> some View { self.modifier(Vip(isVip: isVip)) }}
接下来我们就可以方便的使用了:
Text("Bruce").isVip(false)// 或Text("Bruce").isVip(true)
本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容。
原文转载:http://www.shaoqun.com/a/744774.html
马士基航运:https://www.ikjzd.com/w/1296
bol:https://www.ikjzd.com/w/291
本文为Eul样章,如果您喜欢,请移步AppStore/Eul查看更多内容。Eul是一款SwiftUI&Combine教程App(iOS、macOS),以文章(文字、图片、代码)配合真机示例(Xcode12+、iOS14+,macOS11+)的形式呈现给读者。笔者意在尽可能使用简洁明了的语言阐述SwiftUI&Combine相关的知识,使读者能快速掌握并在iOS开发中实践。自定义Mo
ifttt:https://www.ikjzd.com/w/956
塔图:https://www.ikjzd.com/w/2274
r标:https://www.ikjzd.com/w/1070
各种罚!8月海关&船公司最新政策新规汇总!:https://www.ikjzd.com/home/102747
结婚前夕 他开始嫌我胖:http://lady.shaoqun.com/m/a/273421.html
聚有跨境:https://www.ikjzd.com/w/2520
No comments:
Post a Comment