Ссылка на элемент управления UIImageView, используя строку в XCODE - PullRequest
0 голосов
/ 08 августа 2011

У меня есть около 10 элементов управления UIImageView с именами от pop1 до pop10.

У меня есть 10 кнопок над UIImageView. Кнопки имеют «тег» от 1 до 10, поэтому я знаю, какая кнопка нажимается:

UIButton * aButton =(UIButton *)sender;
aButton.tag - gives me the tag

Я хочу сослаться на UIImageView под кнопкой, чтобы изменить ее изображение при нажатии кнопки над ней:

UIImage *image = [UIImage imageNamed: @"NewImage.png"];
[pop1 setImage:image];

Но в приведенном выше коде я не хочу жестко кодировать «pop1» или «pop2» и т. Д. Я хочу построить строку, используя тег кнопки

NSString *img = [NSString stringWithFormat:@"pop%d",aButton.tag];

дает мне "pop1" или "pop2" и т. Д., Так как я использую aButton.tag.

Итак, используя эту информацию, как я могу написать код для ссылки на UIImage, чтобы изменить его изображение?

В его строке нужно изменить «pop1», чтобы он использовал встроенную строку - img:

[pop1 setImage:image];

Я НЕ хочу вводить оператор switch для каждого тега, так как позже я намереваюсь добавить большое количество таких элементов управления, и это не вариант.

Есть ли способ или есть какой-то другой подход, который я могу использовать?

Обновление

Я попробовал ответ Джона в коде, подобном этому

-(IBAction)pop:(id)sender{
  UIButton * aButton =(UIButton *)sender;
  NSLog(@"clicked button with TAG %d",aButton.tag);

  if (aButton.tag > 0) {
    UIImageView *img = (UIImageView *)[self.view viewWithTag:aButton.tag];

    UIImage *ix = [UIImage imageNamed:@"Newimage.png"];

    [img setImage:ix];
    // stop any more clicks
    aButton.tag = 0;
  }    


}

Все строится нормально, но при запуске я получаю сообщение об ошибке, потому что "img" отображается в окне отладки как "UIButton", а не как UIImage (я думаю).

Я полностью озадачен этим, так как в IB элемент управления отображается как Class: UIImageView, а в коде я называю его UIImage? Они взаимозаменяемы?

Как получить доступ к свойству «tag» в «UIImageView - отображает одно изображение или анимацию, описанную массивом изображений (справка)»

По сути, кнопки также имеют тег, поэтому, если нажать кнопку 2, тег равен 2. Поэтому я хочу изменить изображение UIImageView с тегом = 2 и т. Д.

В настоящее время я изучаю C / C, и такая простая задача на большинстве других языков настолько утомительна.

Я в растерянности. Помогите пожалуйста.

Ответы [ 4 ]

3 голосов
/ 13 октября 2012

дать UIImageView тег от -1 до -10, а затем заменить функцию pop на:

-(IBAction)pop:(id)sender{
  UIButton * aButton =(UIButton *)sender;
  NSLog(@"clicked button with TAG %d",aButton.tag);

  if (aButton.tag > 0) {
    UIImageView *img = (UIImageView *)[self.view viewWithTag:(aButton.tag*-1)];

    UIImage *ix = [UIImage imageNamed:@"Newimage.png"];

    [img setImage:ix];
    // stop any more clicks

  }    
}
0 голосов
/ 08 августа 2011

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

0 голосов
/ 08 августа 2011

Вы можете перебирать подпредставления представления и таким образом получать доступ к каждому UIImageView.Тем не менее, имейте в виду, что использование большого количества изображений быстро заставит вас вызывать предупреждения памяти в мобильных устройствах, поэтому используйте их с умом.

0 голосов
/ 08 августа 2011

Поместите теги в связанные представления - скажем, 101-110, затем возьмите тег кнопки, добавьте к нему 100, а затем вызовите viewWithTag с этим номером ...

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