将图像和文本添加到 Actions Sheet 的警报按钮
Add Image and Text to Actions Sheet's Alert Button
我希望能够向 AlertButton 添加图标和文本,但类型是 Text?
struct NavigationAddItem: View {
@State var showActionView = true
var actionSheet: ActionSheet {
ActionSheet(title: Text("Select an action"), message: nil, buttons: [
.default(Text("Option A"), action: {
// TODO: Enter Option A action
}),
.default(Text("Option B"), action: {
// TODO: Enter Option B action
}),
.cancel()
])
}
var body: some View {
Button(action: {
self.showActionView.toggle()
}) {
Image(systemName: "plus")
.font(.system(size: 24))
}
.actionSheet(isPresented: $showActionView, content: {
self.actionSheet
})
}
}
struct NavigationItems_Previews: PreviewProvider {
static var previews: some View {
NavigationAddItem(showActionView: true)
}
}
此代码给出了操作 sheet 但我想在文本左侧添加图像。
当前:
求职:
我认为目前无法在 ActionSheet 中为按钮定义自己的视图。
查看 ActionSheet
的代码,我们看到以下内容:
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
@available(OSX, unavailable)
public struct ActionSheet {
/// Creates an action sheet with the provided buttons.
public init(title: Text, message: Text? = nil, buttons: [ActionSheet.Button] = [.cancel()])
/// A button representing an operation of an action sheet presentation.
public typealias Button = Alert.Button
}
这表明 ActionSheet
使用的 Button
类型化为 Alert.Button
如果我们查看 Alert
的结构,我们可以看到以下方法:
/// A storage type for an alert presentation.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct Alert {
/// Creates an alert with one button.
public init(title: Text, message: Text? = nil, dismissButton: Alert.Button? = nil)
/// Creates an alert with two buttons.
///
/// - Note: the system determines the visual ordering of the buttons.
public init(title: Text, message: Text? = nil, primaryButton: Alert.Button, secondaryButton: Alert.Button)
/// A button representing an operation of an alert presentation.
public struct Button {
/// Creates an `Alert.Button` with the default style.
public static func `default`(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button
/// Creates an `Alert.Button` that indicates cancellation of some
/// operation.
public static func cancel(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button
/// Creates an `Alert.Button` that indicates cancellation of some
/// operation.
///
/// - Note: the label of the button is automatically chosen by the
/// system for the appropriate locale.
public static func cancel(_ action: (() -> Void)? = {}) -> Alert.Button
/// Creates an `Alert.Button` with a style indicating destruction of
/// some data.
public static func destructive(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button
}
}
注意每个创建Alert.Button
的函数,它们是:default
、cancel
和destructive
,只取一个[=21=类型的标签] 和 (() -> Void)?
类型的 action
。这意味着您只能传递符合 Text
.
的视图
因此,正如您已经发现的那样,尝试传递不符合 Text
的视图是行不通的。
我希望能够向 AlertButton 添加图标和文本,但类型是 Text?
struct NavigationAddItem: View {
@State var showActionView = true
var actionSheet: ActionSheet {
ActionSheet(title: Text("Select an action"), message: nil, buttons: [
.default(Text("Option A"), action: {
// TODO: Enter Option A action
}),
.default(Text("Option B"), action: {
// TODO: Enter Option B action
}),
.cancel()
])
}
var body: some View {
Button(action: {
self.showActionView.toggle()
}) {
Image(systemName: "plus")
.font(.system(size: 24))
}
.actionSheet(isPresented: $showActionView, content: {
self.actionSheet
})
}
}
struct NavigationItems_Previews: PreviewProvider {
static var previews: some View {
NavigationAddItem(showActionView: true)
}
}
此代码给出了操作 sheet 但我想在文本左侧添加图像。
当前:
求职:
我认为目前无法在 ActionSheet 中为按钮定义自己的视图。
查看 ActionSheet
的代码,我们看到以下内容:
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
@available(OSX, unavailable)
public struct ActionSheet {
/// Creates an action sheet with the provided buttons.
public init(title: Text, message: Text? = nil, buttons: [ActionSheet.Button] = [.cancel()])
/// A button representing an operation of an action sheet presentation.
public typealias Button = Alert.Button
}
这表明 ActionSheet
使用的 Button
类型化为 Alert.Button
如果我们查看 Alert
的结构,我们可以看到以下方法:
/// A storage type for an alert presentation.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct Alert {
/// Creates an alert with one button.
public init(title: Text, message: Text? = nil, dismissButton: Alert.Button? = nil)
/// Creates an alert with two buttons.
///
/// - Note: the system determines the visual ordering of the buttons.
public init(title: Text, message: Text? = nil, primaryButton: Alert.Button, secondaryButton: Alert.Button)
/// A button representing an operation of an alert presentation.
public struct Button {
/// Creates an `Alert.Button` with the default style.
public static func `default`(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button
/// Creates an `Alert.Button` that indicates cancellation of some
/// operation.
public static func cancel(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button
/// Creates an `Alert.Button` that indicates cancellation of some
/// operation.
///
/// - Note: the label of the button is automatically chosen by the
/// system for the appropriate locale.
public static func cancel(_ action: (() -> Void)? = {}) -> Alert.Button
/// Creates an `Alert.Button` with a style indicating destruction of
/// some data.
public static func destructive(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button
}
}
注意每个创建Alert.Button
的函数,它们是:default
、cancel
和destructive
,只取一个[=21=类型的标签] 和 (() -> Void)?
类型的 action
。这意味着您只能传递符合 Text
.
因此,正如您已经发现的那样,尝试传递不符合 Text
的视图是行不通的。