He creado un ToolbarContent personalizado para botones comunes, como Guardar, Editar, Cancelar, etc...
Por ejemplo:
import SwiftUI public struct SaveToolbarItem: ToolbarContent { private let placement: ToolbarItemPlacement private let action: () -> Void public init(placement: ToolbarItemPlacement = .confirmationAction, action: @escaping () -> Void = {}) { self.placement = placement self.action = action } public var body: some ToolbarContent { ToolbarItem(placement: placement) { Button( "Save" ) { action() } } } }En el sitio de la llamada:
.toolbar { SaveToolbarItem() { // some code for the Action presentationMode.wrappedValue.dismiss() } .disabled(true) // Value of type 'SaveToolbarItem' has no member 'disabled' } Sin embargo, recibo el siguiente error al intentar usar el método isDisabled :
El valor del tipo 'SaveToolbarItem' no tiene ningún miembro 'deshabilitado'
¿Cómo puedo mitigar este error? Por ejemplo, ¿tal vez definir disabled solo en mis tipos personalizados de ToolbarContent ?
Necesitas colocarlo adentro, como
public var body: some ToolbarContent { ToolbarItem(placement: placement) { Button( "Save" ) { action() } .disabled(true) // << here !! } } * por supuesto, se espera que se pase el parámetro para disabled .
Actualizado: aquí hay un posible enfoque con el modificador disabled incorporado.
Probado con Xcode 13.2 / iOS 15.2
public struct SaveToolbarItem: ToolbarContent { private let placement: ToolbarItemPlacement private let action: () -> Void private var enabled = true public init(placement: ToolbarItemPlacement = .confirmationAction, action: @escaping () -> Void = {}) { self.placement = placement self.action = action } public var body: some ToolbarContent { ToolbarItem(placement: placement) { Button( "Save" ) { action() } .disabled(!enabled) } } func disabled(_ flag: Bool) -> Self { var newItem = self newItem.enabled = !flag return newItem } }