gpt4 book ai didi

swiftui - 是否可以在 SwiftUI 中创建具有 2 个以上按钮的警报?

转载 作者:行者123 更新时间:2023-12-03 15:51:34 26 4
gpt4 key购买 nike

我需要创建一个带有 3 个按钮的警报,但看起来 SwiftUI 现在只给了我们两个选项:一个按钮或两个按钮。我知道使用 UIKit,可以实现 3 个按钮,但我似乎无法在最新版本的 SwiftUI 中找到解决方法来执行此操作。下面是我只使用主要和次要按钮的代码。

Button(action: {
self.showAlert = true
}){
Text("press me")
}
.alert(isPresented: self.$showAlert){
Alert(title: Text("select option"), message: Text("pls help"), primaryButton: Alert.Button.default(Text("yes"), action: {
print("yes clicked")
}), secondaryButton: Alert.Button.cancel(Text("no"), action: {
print("no clicked")
})
)
}

最佳答案

.actionSheet、.sheet 和 .popover 是提供自定义警报的选项。考虑这个示例:

import SwiftUI

struct ContentView: View {
@State private var showModal = false
@State private var cnt = 0
var body: some View {

VStack {
Text("Counter is \(cnt)")
Button("Show alert") {
self.showModal = true
}
}
.sheet(isPresented: $showModal,
onDismiss: {
print(self.showModal)}) {
CustomAlert(message: "This is Modal view",
titlesAndActions: [("OK", {}),
("Increase", { self.cnt += 1 }),
("Cancel", nil)])
}
}
}

struct CustomAlert: View {
@Environment(\.presentationMode) var presentation
let message: String
let titlesAndActions: [(title: String, action: (() -> Void)?)] // = [.default(Text("OK"))]

var body: some View {
VStack {
Text(message)
Divider().padding([.leading, .trailing], 40)
HStack {
ForEach(titlesAndActions.indices, id: \.self) { i in
Button(self.titlesAndActions[i].title) {
(self.titlesAndActions[i].action ?? {})()
self.presentation.wrappedValue.dismiss()
}
.padding()
}
}
}
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

关于swiftui - 是否可以在 SwiftUI 中创建具有 2 个以上按钮的警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57839664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com