es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Genérico para establecer el texto de marcador de posición solo en UILabels establecidos.

El problema:

Tengo un gran proyecto que incluye UILabel, TextFields, etc. que actualmente no tienen un marcador de posición en caso de que falten datos. Actualmente tengo un archivo de constantes con Constants.placeholder que devuelve “-“. Necesito una forma confiable de establecer ese valor en cualquier UILabel que se encuentre en el UIView.

Posibles soluciones:

Puedo crear una función que acepte UIView que itere sobre las subvistas reemplazando cualquier instancia de valor de texto de UILabel con Constants.placeholder. El problema con esta solución es que tengo algunas etiquetas que son estáticas, establecidas en el generador de interfaces, que NO quiero cambiar. Similar a esto: https://stackoverflow.com/questions/32151637/swift-get-all-subviews-of-a-specific-type-and-add-to-an-array

Otro pensamiento que tuve fue crear una función que aceptara una matriz de [UILabel] e iterar sobre ellas, lo que se podría hacer y es válido, sin embargo, podría llevar bastante trabajo para implementar eso.

func reset(labels: [UILabel]) {
    for label in labels {
        label.text = Constants.placeholder
    }
}

Mi última idea fue interceptar de alguna manera awakeFromNib y forzar la configuración de las referencias, pero no creo que sea técnicamente factible. En última instancia, necesito establecer ese valor, Constants.placeholder, en cualquier lugar donde tenga un UILabel que se está configurando, sin tener que hacerlo manualmente en todas partes.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Recomendación:

    Recomendaría crear una extensión en UILabel que establezca el placeholder para cualquier instancia de UILabel. Esta extensión puede ser llamada en cualquier lugar del código donde una UILabel necesite mostrar un valor de placeholder. Aquí tienes un ejemplo de implementación:

    extension UILabel {
        func setPlaceholder() {
            self.text = Constants.placeholder
        }
    }
    

    Con esta extensión, puedes simplemente llamar a setPlaceholder() en cualquier instancia de UILabel para establecer el texto del placeholder. Este enfoque es simple, limpio y reutilizable, y puedes usarlo para cualquier instancia de UILabel, sin importar si se estableció a través del constructor de interfaz o programáticamente.

Comments are closed.