Objective-C Переключение между двумя кнопками - PullRequest
1 голос
/ 25 марта 2011

Я новичок в Objective-C, и я пытаюсь создать приложение с двумя кнопками, которые включаются и выключаются в тандеме.Я обработал состояния кнопок (изображения для включения и выключения) в Interace Bulder, но у меня возникают проблемы с выяснением, как именно написать логику в Xcode.

Вот условия, которые мне нужно выполнить:

- Когда ни одна из кнопок не включена, любая из них может быть включена.

-Когда кнопка 1 включена, кнопка 2 нажата, кнопка 1 выключена, а кнопка 2 включена.

-Когда кнопка 2 включена, кнопка 1 нажата, кнопка 2 выключена и кнопка1. Включается 1.

- Когда кнопка 1 включена и кнопка 1 нажата, ничего не происходит.

- Когда кнопка 2 включена и кнопка 2 нажата, ничего не происходит.

Я использовал BOOL, чтобы попытаться выработать логику, но это просто не для меня.У кого-нибудь есть идеи, как это сделать?

Кнопки были добавлены программно, поэтому простой код выглядит так в файле .h:

в .h:

#import <UIKit/UIKit.h>
@interface Profile_Settings_PageViewController : UIViewController {


IBOutlet UIButton *Button1;
IBOutlet UIButton *Button2;


BOOL ButtonSelected;
}

@property (nonatomic, retain) UIButton *Button1;
@property (nonatomic, retain) UIButton *Buton2;


-(IBAction) ButtonTouched:(id)sender;
@end

затем файл .m:

#import "Profile_Settings_PageViewController.h"

@implementation Profile_Settings_PageViewController
@synthesize Button1;
@synthesize Button2;



-(IBAction) ButtonTouched:(id)sender
{

if (ButtonSelected == 0)
{
    [Button1 setSelected: NO];
    [Button2 setSelected: NO];
    ButtonSelected = 1;
}

else if (ButtonSelected == 1)  
{
    [Button1 setSelected: YES];
    [Button2 setSelected: YES];

    ButtonSelected = 0;

}

}
- (void)viewDidLoad {

[super viewDidLoad];

ButtonSelected == 0;
}

- (void)dealloc {
  [Button1 release];
  [Button2 release];

  [super dealloc];
}

@end

У меня проблема в том, где начинается выражение if.Я не уверен, как указать конкретные кнопки для логики.Я знаю, что там сейчас не правильно, потому что это относится к обеим кнопкам, и потому что логика неверна, что создает проблемы при написании условных операторов.Я не уверен, как это исправить, хотя ...

Ответы [ 5 ]

4 голосов
/ 25 марта 2011

Если ваши состояния изображения для NORMAL и SELECTED, создайте две кнопки с выходами, отметьте их 1 и 2 соответственно, и в вашем методе действия кнопки:

Пуск с выбранной кнопкой 1, нормальная кнопка 2.

- (IBAction)buttonAction:(UIButton*)sender 
{
    if (sender.selected)
        return;
    if (sender.tag == 1)
    {
        button1.selected = !button1.selected;
        button2.selected = !button1.selected;
    }
    else if (sender.tag == 2)
    {
        button2.selected = !button2.selected;
        button1.selected = !button2.selected;
    }   
}
1 голос
/ 25 марта 2011

Предполагая, что вы выяснили, как подключить ваши кнопки в IB, чтобы они вызывали метод в вашем viewController при переключении.Определите две розетки в контроллере представления (по одной для каждой кнопки) и действие, которое будет вызываться при изменении значения переключателя:

@interface ToggleViewController : UIViewController {

  UISwitch *button1;
  UISwitch *button2;
}

@property (nonatomic, retain) IBOutlet UISwitch *button1;
@property (nonatomic, retain) IBOutlet UISwitch *button2;

- (IBAction)switchAction:(id)sender;

@end

Убедитесь, что вы подключили розетки, а также подключили событие Value Changed кswitchAction для обеих кнопок.Метод действия переключения может быть таким:

- (IBAction)switchAction:(id)sender {

  if ([sender isOn]) {

    if ([sender isEqual:button1])
    {
      [button2 setOn:NO animated:YES];
    } else {
      [button1 setOn:NO animated:YES];
    }
  }
}
1 голос
/ 25 марта 2011
int selectedIndex = -1;

if( selectedIndex != 1 && b1 clicked ) { selectedIndex = 1; do stuff }
if( selectedIndex != 2 && b2 clicked ) { selectedIndex = 2; do stuff }

т.е.:

  • имеет состояние «какая кнопка выбрана»
  • имеет состояние «ничего не выбрано»
  • проверять каждый клик начто выбрано / не выбрано, и обновите его, когда что-то случится
0 голосов
/ 15 апреля 2017

Для swift3 это работает

@IBAction func mealsButtonAction(_ sender: UIButton)
{

        if sender .isEqual(beforeMealsButton)
        {
            beforeMealsButton.isSelected = true
            beforeMealsButton .setImage(UIImage.init(named: "before_lunch_hover"), for: .normal)

            afterMealsButton .setImage(UIImage.init(named: "after_lunch_normal"), for: .normal)
            boolDict["bm"] = true
            boolDict["am"] = false
        }
        else
        {
            afterMealsButton.isSelected = true
            beforeMealsButton .setImage(UIImage.init(named: "before_lunch_normal"), for: .normal)

            afterMealsButton .setImage(UIImage.init(named: "after_lunch_hover"), for: .normal)
            boolDict["bm"] = false
            boolDict["am"] = true
        }


}

Спасибо @ Рог.

0 голосов
/ 25 марта 2011

Все довольно просто: при нажатии одной кнопки вы хотите выключить другую. Поэтому в обработчике UIControlEventTouchUpInside для button1 отключите button2. А в обработчике UIControlEventTouchUpInside для button2 отключите button1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...