Подтвердить что ты не робот

Как использовать UIButton в качестве тумблера

Я использую UIButton настраиваемого типа, и я хочу использовать его как тумблер с изменением образа. Например, когда он щелкнут, если ранее он не был выбран в выбранном режиме, он должен идти в выбранном режиме или наоборот наоборот. Также у него будет другое изображение, и когда он будет выбран, у него будет другое изображение, если оно не будет.

Я не могу сделать это программно, есть ли хороший простой способ сделать это.

4b9b3361

Ответ 1

Я считаю, что этот пост имеет лучшее решение: iPhone UIButton с функциональностью UISwitch

UIButton имеет встроенный механизм. Существует выбранное свойство, которое вы можете установить и изменить скины на основе состояния.

Ответ 2

В файле заголовка добавьте:

IBOutlet UIButton *toggleButton;
BOOL toggleIsOn;

@property (nonatomic, retain) IBOutlet UIButton *toggleButton;

В реализации:

- (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];
}

затем свяжите свою кнопку с IBActions и IBOutlet и инициализируйте toggleIsOn до NO.

Ответ 3

В интерфейсе:

@interface TransportViewController : UIViewController {

    UIButton *button;
}
@property(nonatomic, retain) UIButton *button;

В реализации:

- (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];
}

Ответ 4

UIButton поддерживает по умолчанию функцию переключения. Чтобы использовать это, вам нужно установить другое изображение или даже цвет текста в Interface Builder для State Configuration = Selected и использовать выбранное свойство UIButton для переключения его состояния.

код:

- (IBAction)yourButtonTouch:(UIButton *)sender {

    sender.selected = !sender.selected;
    if (sender.selected) {
        //...
        // Action to be performed when button is selected or 
        // the first touch
        // ... 

    }
}

Ответ 5

- (IBAction)buttonTapped:(UIButton *)sender {


   //first time sender.selected is No
    if (sender.selected) {
        //code here
        sender.selected=NO;
    }
    else{
    //code here
        sender.selected=YES;
    }
}

Ответ 6

Единственная проблема заключается в том, что для достижения переключения вы должны использовать 2 изображения. Также вы не можете использовать свойство выделенное, потому что UIButton (UIControl) автоматически устанавливает это свойство под капотом, а точнее в touchBegan:, touchMoved:сильные > и т.д. методы. Лучший способ, который я предлагаю, - простое использование подкласса:

@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

Этого достаточно, чтобы заставить ваш переключатель работать

Ответ 7

Для Swift 3

@IBAction func playPause(sender : UIButton){

   sender.isSelected = !sender.isSelected
   if sender.isSelected {
      player.pause()
   }else{
      player.play()
  }
}

Ответ 8

Изменить изображение кнопки не является трудной задачей. И вы можете использовать некоторое значение BOOL, чтобы определить, находится ли ваша кнопка переключения в состоянии "ON". и в вашем методе onBtnClk вы можете просто изменить состояние своего значения BOOL и установить изображение для текущего состояния.

Ответ 9

Я сделал этот класс, изменив класс на PGToggleButton в построителе интерфейса, это сделает. Он использует изображения для состояния Default и Highlighted и имеет общедоступное свойство для получения/установки фактического состояния.

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