Objective-C在两个按钮之间切换

时间:2011-03-24 22:15:11

标签: iphone objective-c uibutton

我是Objective-C的新手,我正在尝试创建一个带有两个按钮的应用程序,这两个按钮可以串联切换。我已经在Interace Bulder中处理了按钮状态(打开和关闭的图像),但是我很难弄清楚如何在Xcode中编写逻辑。

以下是我需要满足的条件:

- 当两个按钮都没有打开时,任何一个按钮都可能打开。

- 当按钮1打开,单击按钮2时,按钮1关闭,按钮2打开。

- 当按钮2打开,单击按钮1时,按钮2关闭,按钮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 个答案:

答案 0 :(得分:4)

如果您的图像状态为NORMAL和SELECTED,请创建两个带插座的按钮,将它们标记为1&amp;分别为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 :(得分:1)

int selectedIndex = -1;

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

即:

  • 有一个“选择了哪个按钮” 状态
  • 有“没有选择” 状态
  • 检查每次点击 选中/未选中,并更新它 当事情发生时

答案 2 :(得分:1)

假设您已经弄清楚如何在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];
    }
  }
}

答案 3 :(得分:0)

这很简单:当触摸任一按钮时,你想关闭另一个按钮。因此,在button1的UIControlEventTouchUpInside处理程序中,将button2设置为off。在button2的UIControlEventTouchUpInside处理程序中,将button1设置为off。

答案 4 :(得分:0)

对于swift3,这是有效的

mystery=input=>multiplier=>(input+2)*multiplier*4;
mystery3=param=>bonus=>param(6)+bonus;
result=mystery3(mystery(3))(2);

谢谢@Rog。