resaltar mediante progtwigción UIBarButtonItem

después de tocar el 'logging' BarButtonItem, quisiera mantenerlo resaltado programáticamente hasta que la grabación termine. Los charts destacados de iOS son muy buenos, por lo tanto, me gustaría quedarme o establecer ese estado.

Hasta ahora he encontrado 'setSelected' y 'setHighlighted' pero estos no funcionan en un UIBarButtonItem. ¿Alguna sugerencia sobre cómo resolver esto? Gracias de antemano, Koen.

setSelected y setHighlighted funcionan bien en UIControls, pero no en UIBarButtonItems (que no son UIControls).

Recomiendo utilizar UIBarButtonItem - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics (documentation vinculada) método para cambiar la image de background a algo que imita resaltar.

También puede establecer una UIView personalizada en el elemento que también imite resaltar (vea la propiedad customView ).

Si agrega un UIBarButtonItem con un UIButton respalde, puede solicitar el CustomView.

UIBarButtonItem con un UIB de respaldo

 UIButton *button = (UIButton *)[self.barButtonItem customView]; [button setSelected:YES]; 

Si desea utilizar los charts pnetworkingeterminados, puede inicializar su elemento de button como

 UIBarButtonItem *toggleButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"MyButton" style:UIBarButtonItemStyleBordenetworking target:someObject action:@selector(doSomething:)]; 

y alternar con

 toggleButtonItem.style = (toggleButtonItem.style == UIBarButtonItemStyleBordenetworking) ? UIBarButtonItemStyleDone : UIBarButtonItemStyleBordenetworking; 

También debería usar la propiedad de estilo para leer el estado actual.

 BOOL isSelected = (toggleButtonItem.style == UIBarButtonItemStyleDone) 

Usted crea una salida de este button, por ejemplo, btnMoreOut y usted hace lo siguiente:

 btnMoreOut.tintColor = [UIColor colorWithRed:0.882 green:0.722 blue:0.169 alpha:1]; 

Espero que esto ayude, buena suerte 🙂

1) Obtenga una reference al button de su barra.

2) Usando la propiedad de estilo, asignalo a UIBarButtonItemStyleDone, o UIBarButtonItemStylePlain sobre la base de algún estado.

NÓTESE BIEN. Puedes get el estado de varias maneras. Por ejemplo, al usar NSUserDefaults, guarde un par de valores key allí. Saque el valor y tome una representación de BOOL para probar. Luego escribe esta línea:

  self.myButton.style = self.someState ? UIBarButtonItemStyleDone : UIBarButtonItemStylePlain; 

O con todos los valores pnetworkingeterminados nesteds así:

 self.myButton.style = [[NSUserDefaults standardUserDefaults] boolForKey:@"someKey"] ? UIBarButtonItemStyleDone : UIBarButtonItemStylePlain; 

Sin el operador ternario:

 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"someKey"]) { self.myButton.style = UIBarButtonItemStyleDone; } else { self.myButton.style = UIBarButtonItemStylePlain; } 

Puedes probar esto (Swift):

  func setupInterface(){ var myButton = UIBarButtonItem() if (your_condition){ myButton = UIBarButtonItem(image: UIImage(named: "img_selected"), style: .Plain, target: self, action: Selector("DoSomething:")) } else{ myButton = UIBarButtonItem(image: UIImage(named: "img_unselected"), style: .Plain, target: self, action: Selector("DoSomething:")) } navigationItem.rightBarButtonItem = myButton } 

Llama setupInterface () en ViewDidLoad y otra function en tu código.

Si desea cambiar solo los attributes del título (por ejemplo, el color del título), puede llamar a setTitleTextAttributes:forState:

Para mí, funciona más estable que setTintColor: (cambio de saltos de color de tinte durante la desenrollación de la animation de inserción).

Puede usar dos imágenes para los dos estados del button como para un estado "UIControlStateNormal" puede usar una image para la condición normal.

Y luego, cuando se presiona el button, configure la otra image que la muestra presionada, luego la image con una verificación usando el método isSelected del button UIB.

Espero que esto tenga algún sentido para ti.