iPhone - 按下按钮时调用在UIView中生成的UISwitch

时间:2012-01-25 18:26:49

标签: iphone xcode uiview uibutton uiswitch

为了澄清我的问题,我的程序在屏幕上有三个灯泡(自定义UIButton) 当按下任何灯泡时,我以编程方式生成一个带开关的UIView 当我打开开关时,相应的灯泡会亮起(改变它的背景图像) 但是,我无法访问此UISwitch,因为我无法公开声明它

我的代码是这样的:

@property buttonA;
@synthesize buttonA;//all three buttons have their background image set to 'off.png'

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

  UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(1,1, 64, 64)];
  UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0,0,64,64)];
  [mySwitch addTarget:self action:@selector(onOrOff) forControlEvents:UIControlEventValueChanged];

  [myView addSubview:mySwitch]
  [self.view addSubview:myView];   

}

令我烦恼的是如何对选择器onOrOff进行编程,以便它知道正在触摸哪个开关并相应地更改相应按钮的背景图像。

2 个答案:

答案 0 :(得分:0)

这样做的一种方法是,在IB中为它们提供不同的标记号,并在- (IBAction)lightBulbPressed:(UIButton *)sender方法中获取它们的标记。例如NSInteger pressedButtonTag = [sender tag];,然后从那里开始。

此外,每次用户按下按钮时,不是使用alloc / init myView,而是可以在IB中添加该视图,将切换添加到它,放入所有者的层次结构但不包含视图,并设置在.h的出口。在您需要时随时拨打电话,然后再按标签访问交换机,例如(UISwitch *mySwitch = (UISwitch *)[myView viewWithTag:kSwitchTag];)并执行您想要执行的操作(打开或关闭),将其添加到子视图中并稍后将其删除。这样效率更高。

答案 1 :(得分:0)

想想你的方法:

- (IBAction)lightBulbPressed:(UIButton *)sender {
    // your method
}

你已经知道是谁打过电话了。这条信息存储在sender中。 因此,您可以将其保存并稍后在onOrOff

中使用

顺便说一句,如果你使用的是UISwitch,你必须检查

UIControlEventValueChanged

而不是UIControlEventTouchUpInside。

编辑:要传递sender,您可以将其值存储到.h文件中声明的NSString *buttonTapped

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

if (sender == bttOne) {
    buttonTapped = @"ButtonOneTapped";
} else if (sender == bttTwo) {
    buttonTapped = @"ButtonTwoTapped";
} else if (sender == bttThree) {
    buttonTapped = @"ButtonThreeTapped";
}

  // your method

}

- (void)onOrOff {
    if ([buttonTapped isEqualToString:@"ButtonOneTapped"]) {
        // Button One
    } else if ([buttonTapped isEqualToString:@"ButtonTwoTapped"]) {
        // Button Two
    } else if ([buttonTapped isEqualToString:@"ButtonThreeTapped"]) {
        // Button Three
    }
}