¿Cómo aplico las propiedades de UIAppearance Proxy a UILabel?

He estado obteniendo resultados poco confiables al intentar aplicar estilos de proxy UIAppearance al proxy de clase UILabel. Por ejemplo, el siguiente funciona como era de esperar:

[[UILabel appearance] setFont:[UIFont fontWithName:SOME_FONT size:SOME_SIZE]]; [[UILabel appearance] setShadowColor:[UIColor blackColor]]; 

Sin embargo, configurar el textColor no funciona, esto:

 [[UILabel appearance] setColor:[UIColor greenColor]]; 

funciona. Tipo de Es poco confiable y hace que cualquier llamada específica de instancia a setTextColor: sea ​​ignorada.

¿Cuál es la forma correcta de aplicar estilos de UIAppearance a UILabel?

De acuerdo, resulta que no puede aplicar estilo a ninguna propiedad de UILabel utilizando el proxy UIAppearance .

Mientras que la clase UILabel ajusta al protocolo UIAppearanceContainer , una comprobación de UILabel.h muestra que ninguna de sus propiedades está marcada con UI_APPEARANCE_SELECTOR , el requisito previo para el uso de UIAppearance .

Tío.

He subclase UILabel

 @interface SmallLabel : UILabel @end @implementation SmallLabel - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { } return self; } @end 

Luego uso appearanceWhenContainedIn:

 UIFont *smallFont = [UIFont fontWithName:@"Arial" size:15]; [[SmallLabel appearanceWhenContainedIn:[UIView class], nil] setFont:smallFont]; 

Esto funciona para usar la fuente deseada para todos los SmallLabels en mi aplicación. Solo necesito configurar la clase personalizada en SmallLabel en el inspector de identidad XCode. No parece funcionar con tags creadas mediante progtwigción, solo aquellas en NIB.

Después de más pruebas, este método no siempre funciona de manera confiable.

En Swift, usted hace lo siguiente para personalizar los atributos de apariencia para un UILabel cuando está contenido en un UITableViewHeaderFooterView:

 UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = UIFont.boldSystemFont(ofSize: 18) UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).textColor = .white 

Esto se aplicará al atributo textLabel cuando use UITableViewHeaderFooterView en:

  public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: headerViewId) if headerView == nil { headerView = UITableViewHeaderFooterView(reuseIdentifier: headerViewId) } headerView?.textLabel?.text = "My Header".uppercased() return headerView } 

Esto realmente ayuda al usar UITableViewStyle.grouped, ya que esas vistas de encabezado de sección parecen anularse con un estilo predeterminado incluso si personaliza la UITableViewHeaderFooterView.textLabel en viewForHeaderInSection

El siguiente código funcionó para mí usando swift 2.2 y para iOS 9.0

  let textFieldInsideSearchBar = self.searchBar?.valueForKey("searchField") as? UITextField textFieldInsideSearchBar?.textColor = BCGConstants.Colors.darkBluishPurpleColor() let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.valueForKey("placeholderLabel") as? UILabel textFieldInsideSearchBarLabel?.textColor = UIColor(red: 220/255, green: 209/255, blue: 231/255, alpha: 1.0)`enter code here`