iPhone - вызов UISwitch, который генерируется в UIView при нажатии кнопки - PullRequest
0 голосов
/ 25 января 2012

Чтобы прояснить мой вопрос, моя программа имеет три лампочки на экране (настраиваемая кнопка UIB) когда какая-нибудь лампочка нажата, я программно генерирую 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 голосов
/ 25 января 2012

Подумайте о своем методе:

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

Вы уже знаете, кто это назвал. Эта часть информации хранится в sender. Таким образом, вы можете сохранить его и использовать позже в onOrOff

Кстати, если вы используете UISwitch, вы должны проверить

UIControlEventValueChanged

, а не UIControlEventTouchUpInside.

РЕДАКТИРОВАТЬ: Для передачи sender вы можете сохранить его значение в NSString *buttonTapped, объявленном в вашем .h файле

- (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
    }
}
0 голосов
/ 25 января 2012

Один из способов сделать это - дать им разные номера тегов в IB, а в методе - (IBAction)lightBulbPressed:(UIButton *)sender получить их тег. например NSInteger pressedButtonTag = [sender tag];, и иди оттуда.

Кроме того, вместо alloc / init myView каждый раз, когда пользователь нажимает кнопку, вы можете добавить это представление в IB, добавить к нему переключатель, поместить в иерархию владельца, но не представление, и установить точку выхода. к нему в .ч. Вызывайте его всякий раз, когда вам это нужно, и снова обращайтесь к переключателю по тегу, например (UISwitch *mySwitch = (UISwitch *)[myView viewWithTag:kSwitchTag];) и делайте все, что хотите (вкл. Или выкл.), Добавьте его в подпредставление и удалите позже. Это более эффективно.

...