SwiftUI中的Alert和ActionSheet的使用与探索(与enum的组合使用)

AlertActionSheet都是弹框的一种类型,Alert主要是在屏幕中间弹框,有一种提示警告的作用,而ActionSheet是从底部弹框一个界面,显示一些可以操作的列表项等等。

Alert的使用

Alert就好比UIKit中的UIAlertViewUIAlertController,在SwiftUIAlert还是比较好用的,主要分3步:

  1. 要有能驱动弹出Alert的变量,即被@State修饰的变量。
  2. SwiftUI组件上实现.alert()修饰符方法,并传入绑定的变量。
  3. .alert()修饰符方法中返回一个Alert组件的实例。

在这里插入图片描述
完成上面三步就可以弹出一个Alert了,那比如说我这一个界面可能会弹出好几个Alert,那如何操作呢?比如需要两个Alert,直接弄两个变量,然后添加两个.alert()修饰符?比如下面的代码:

在这里插入图片描述
通过上面的效果看,显示是不行的,第二个alert()修饰符覆盖了第一个,第一个无效了,只有第二个能弹出来。如果非要这么写,那么就把两个alert()修饰符分别放到对应的Button上,这样就可以了。如下:

在这里插入图片描述
那么如果更多的弹框,这个解决方法就很low了,更好的解决方法是和enum结合的使用,将左右弹框类型放到enum里面,详见下面Alert、ActionSheet与enum的组合使用一节。

话说还是奔着更简洁UI的标准,在body里面尽量少一些业务逻辑代码,我们将alert()修饰符的content部分单独抽出来一个方法,直接返回一个Alert实例。如下图。
在这里插入图片描述
关于创建Alert实例对象,方法也比较多,可以设置titlemessageprimaryButtonsecondaryButton,两个Button属于Alert.Button类型。

在SwiftUI中,Alert.Button是用于定义Alert中的按钮的类型。Alert.Button允许为Alert框添加不同的按钮,并为每个按钮定义标题、样式和操作。以下是Alert.Button的一些重要属性和用法:

  • 标题(label):按钮显示的文本内容。需要设置Text组件,对Text组件设置样式无效,比如字体颜色、大小等等。
  • 样式(defaultcanceldestructive):按钮的样式,分别表示默认按钮、取消按钮和破坏性按钮。
  • 操作(action):按钮被点击时执行的操作,可以是一个闭包或函数。

ActionSheet的使用

SwiftUI中,ActionSheet用于显示一个操作表单,其中包含多个选项供用户选择。ActionSheet通常用于在用户执行某些操作时显示一个选择菜单,例如确认删除操作或选择不同的操作选项。
要实现该功能还是3步走:

  1. 要有能驱动弹出ActionSheet的变量,即被@State修饰的变量。
  2. SwiftUI组件上实现.actionSheet修饰符方法,并传入绑定的变量。
  3. .actionSheet()修饰符方法中返回一个ActionSheet组件的实例。

在这里插入图片描述
关于ActionSheet说明

  • title:指定操作表单的标题。 只能通过Text设置文本,不能再设置文本的样式,比如字体颜色,大小等等。
  • message:可选,指定操作表单的消息内容。只能通过Text设置文本,不能再设置文本的样式,比如字体颜色,大小等等。
  • buttons:定义操作表单中的按钮选项,包括默认按钮(.default)、破坏性按钮(.destructive)和取消按钮(.cancel)。
  • .actionSheet修饰符:将ActionSheet绑定到视图,并根据isPresented状态来控制显示与隐藏。

Alert、ActionSheet与enum的组合使用。

Alert与enum结合使用
当一个界面alert较多的时候,建议将所有错误类型方法enum中定义,然后在点击的时候设置alert类型,如下代码,这里定义了alert类型,以及对应的TitleMessageMessage也支持设置类型的时候再传入。

  enum AlertType {
    case none
    case success
    case error(String, String)

    var title: String {
      switch self {
        case .none:
          return "Error"
        case .success:
          return "Success Alert"
        case .error(let title, _):
          return title
      }
    }

    var message: String {
      switch self {
        case .none:
          return "Error message"
        case .success:
          return "login successfully"
        case .error(_, let message):
          return message
      }
    }
  }

最终代码和效果如下:
在这里插入图片描述
按照这种写法,一个界面再多的alert也能比较好的处理,UI上比较整洁,业务逻辑上也比较清晰明了。

ActionSheet与enum结合使用
如果一个界面需要弹出多个不同的操作列表,我们也可以像Alertenum组合那样使用,自定义一个ActionSheetType,分出几种类型,然后根据不同的类型定义TitleMessage,以及需要显示哪些相关的Buttons。这里就不再赘述了。

写在最后

本篇文章比较简单,主要介绍了AlertActionSheet的使用,希望能够帮助到有需要的朋友,如果觉得有帮助,还望点个赞,添加个关注,笔者也会不断地努力,写出更多更好用的文章。

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用SwiftUI自定义iOS分段控件可以通过以下步骤实现: 1. 创建一个新的SwiftUI View,命名为SegmentedControl。 2. 在SegmentedControl定义一个枚举类型,用于表示分段控件的选项。 3. 在SegmentedControl定义一个@Binding属性用于绑定选的选项。 4. 在SegmentedControl使用ForEach循环遍历所有的选项,并将它们显示在分段控件。 5. 在ForEach循环使用Button显示每一个选项,并在按钮的action更新选的选项。 6. 为分段控件添加样式,例如设置选的选项的背景色和字体颜色等。 下面是一个简单的示例代码: ```swift enum SegmentedOption: String, CaseIterable { case option1 case option2 case option3 } struct SegmentedControl: View { @Binding var selectedOption: SegmentedOption var body: some View { HStack { ForEach(SegmentedOption.allCases, id: \.self) { option in Button(action: { self.selectedOption = option }) { Text(option.rawValue) .foregroundColor(self.selectedOption == option ? .white : .black) .padding(.horizontal, 20) .padding(.vertical, 10) .background(self.selectedOption == option ? Color.blue : Color.gray) .cornerRadius(10) } } } } } ``` 在使用时,只需要将SegmentedControl添加到需要显示的View,并将选的选项绑定到某个属性即可。例如: ```swift struct ContentView: View { @State private var selectedOption: SegmentedOption = .option1 var body: some View { VStack { SegmentedControl(selectedOption: $selectedOption) Text("Selected option: \(selectedOption.rawValue)") } } } ``` 这样就可以在界面上显示一个自定义的iOS分段控件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值