iphone - seguridad - interlocks
Cómo usar un UIButton como un interruptor de palanca (9)
Cambiar la imagen del botón no es una tarea difícil. Y puede usar algún valor BOOL para detectar si su botón de conmutación está en el estado "ON". y en su método onBtnClk puede simplemente cambiar el estado de su valor BOOL y establecer la imagen para el estado actual.
Estoy usando un UIButton de tipo personalizado y lo que quiero es usarlo como un interruptor con el cambio de imagen. Al igual que cuando se hace clic en él, si anteriormente no estaba en el modo seleccionado, debería ir en modo seleccionado o viceversa. También tendrá una imagen diferente y cuando se seleccione tendrá una imagen diferente cuando no lo esté.
No puedo hacerlo programáticamente, ¿hay alguna manera fácil y sencilla de hacerlo?
Creo que esta publicación tiene una mejor solución: iPhone UIButton con funcionalidad UISwitch
UIButton tiene una función integrada. Hay una propiedad seleccionada que puede establecer y cambiar las máscaras según el estado.
El único problema aquí es que debes usar 2 imágenes para lograr alternar. Tampoco puede usar la propiedad resaltada debido a UIButton (UIControl) establece automáticamente esta propiedad debajo del capó, para ser exactos en touchBegan :, métodos de TouchMoved:, etc. La mejor manera que ofrezco es usar subclases de uso simple:
@interface ToggleButton : UIButton
@end
@implementation ToggleButton
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
self.highlighted = self.selected = !self.selected;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesMoved:touches withEvent:event];
self.highlighted = self.selected;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
[super touchesEnded:touches withEvent:event];
self.highlighted = self.selected;
}
- (void)setSelected:(BOOL)selected{
[super setSelected:selected];
self.highlighted = selected;
}
@end
Esto es suficiente para hacer que tu palanca funcione
En la interfaz:
@interface TransportViewController : UIViewController {
UIButton *button;
}
@property(nonatomic, retain) UIButton *button;
En la implementación:
- (void)loadView {
[super loadView];
...
[self setButton:[UIButton buttonWithType:UIButtonTypeCustom]];
[button addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];
[button setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"image2"] forState:UIControlStateSelected];
}
- (void) onClick:(UIButton *)sender {
[sender setSelected:!sender.selected];
}
En su archivo de encabezado, agregue:
IBOutlet UIButton *toggleButton;
BOOL toggleIsOn;
@property (nonatomic, retain) IBOutlet UIButton *toggleButton;
En la implementación:
- (IBACtion)toggle:(id)sender
{
if(toggleIsOn){
//do anything else you want to do.
}
else {
//do anything you want to do.
}
toggleIsOn = !toggleIsOn;
[self.toggleButton setImage:[UIImage imageNamed:toggleIsOn ? @"on.png" :@"off.png"] forState:UIControlStateNormal];
}
luego, vincule su botón con IBActions y IBOutlet e inicialice toggleIsOn
a NO.
Hice esta clase, cambiando la clase a PGToggleButton en el constructor de interfaz lo hará. Utiliza las imágenes para estado Predeterminado y Destacado, y tiene una propiedad pública para obtener / establecer el estado real.
PGToggleButton.h
@interface PGToggleButton : UIButton
@property (nonatomic, getter=isOn) BOOL on;
-(void)toggle;
@end
PGToggleButton.m
#import "PGToggleButton.h"
@interface PGToggleButton ()
@property (nonatomic, strong) UIImage *offStateImage;
@property (nonatomic, strong) UIImage *onStateImage;
-(void)touchedUpInside:(UIButton*) sender;
@end
@implementation PGToggleButton
@synthesize on = _on;
@synthesize offStateImage = _offStateImage;
@synthesize onStateImage = _onStateImage;
-(void)awakeFromNib
{
[super awakeFromNib];
self.offStateImage = [self imageForState:UIControlStateNormal];
self.onStateImage = [self imageForState:UIControlStateHighlighted];
[self addTarget:self
action:@selector(touchedUpInside:)
forControlEvents:UIControlEventTouchUpInside];
}
-(void)touchedUpInside:(UIButton*) sender
{ [self toggle]; }
-(void)toggle
{ self.on = toggle(_on); }
-(void)setOn:(BOOL) on
{
_on = on;
if (on)
[self setImage:self.onStateImage forState:(UIControlStateNormal)];
else
[self setImage:self.offStateImage forState:(UIControlStateNormal)];
}
@end
UIButton
admite una funcionalidad de "alternar" de manera predeterminada. Para usar esto, necesita establecer una imagen diferente o incluso color de texto en el Generador de Interfaces para la State Configuration = Selected
, y usar la propiedad seleccionada de UIButton
para alternar su estado.
Código:
- (IBAction)yourButtonTouch:(UIButton *)sender {
sender.selected = !sender.selected;
if (sender.selected) {
//...
// Action to be performed when button is selected or
// the first touch
// ...
}
}
Para Swift 3
@IBAction func playPause(sender : UIButton){
if sender.isSelected {
player.pause()
}else{
player.play()
}
sender.isSelected = !sender.isSelected
}
- (IBAction)buttonTapped:(UIButton *)sender {
//first time sender.selected is No
if (sender.selected) {
//code here
sender.selected=NO;
}
else{
//code here
sender.selected=YES;
}
}