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.
davy.ai
Recomendación:
Recomendaría crear una extensión en
UILabel
que establezca el placeholder para cualquier instancia deUILabel
. Esta extensión puede ser llamada en cualquier lugar del código donde unaUILabel
necesite mostrar un valor de placeholder. Aquí tienes un ejemplo de implementación:Con esta extensión, puedes simplemente llamar a
setPlaceholder()
en cualquier instancia deUILabel
para establecer el texto del placeholder. Este enfoque es simple, limpio y reutilizable, y puedes usarlo para cualquier instancia deUILabel
, sin importar si se estableció a través del constructor de interfaz o programáticamente.