Me gustaría implementar NSMenuItem para activar ciertas funciones (por ejemplo, "Ejecutar cálculo"). ¿Cómo accedo a los elementos del menú para habilitar o deshabilitar los elementos según la lógica de la aplicación? Por ejemplo, la función "cortar" para el texto solo se activa como elemento de menú cuando se selecciona la prueba. "Ejecutar cálculo" solo debe habilitarse cuando se dan ciertos criterios. ¡Gracias!
Probablemente tenga algún controlador de vista o controlador de ventana que implemente runCalculation , como este:
class ViewController: NSViewController { @IBAction func runCalculation(_ sender: Any?) { print(1 + 1) } } Y ha conectado la acción del elemento de menú "Ejecutar cálculo" al método runCalculation cálculo del controlador.
Para habilitar y deshabilitar el elemento del menú, siga estos pasos:
Asegúrese de que el menú "Calculadora" en sí (del tipo NSMenu ) tenga activada la propiedad "Auto Enable Items" en IB, o que tenga autoenablesItems configurado como verdadero en el código.
Haga que su controlador se ajuste al protocolo NSUserInterfaceValidations :
extension ViewController: NSUserInterfaceValidations { func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool { // See step 3... return true } } En validateUserInterfaceItem , verifica si la action del elemento es runCalculation(_:) . Si es así, devuelva verdadero si y solo si desea permitir que el usuario ejecute el cálculo:
extension ViewController: NSUserInterfaceValidations { func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool { switch item.action { case #selector(runCalculation(_:))?: // Put your real test here. return !textField.stringValue.isEmpty default: return true } } }