Изменить изображения UIImageView, используя For Loop - PullRequest
0 голосов
/ 05 марта 2020

Я пытался закодировать то, что имеет значение для l oop от 0 до 3, которое изменяет 3 различных UIImageView, используя их номер строки.

Первый из них будет называться "c1", второй будет называться "c2", третий "c3" и т. д. c ..

Эти UIImageView уже определены в моем файле .h, а также доступны в моем файле .m. Ранее я просто вызывал его по переменной, но мне нужно выполнить итерацию для l oop, чтобы сделать процесс более плавным, а не жестко кодировать несколько строк.

Текущий код:

 for (int i = 0; i < 3; i++){ 


                NSString *id = [NSString stringWithFormat:@"c%i" , i];


                UIImageView *imageViewInLoop = id;

                [self.imageViewInLoop setImage:[UIImage imageNamed:@"defaultphoto.jpg"]];

            }

Этот код не содержит ошибок, кроме предупреждения в третьей строке об инициализации UIImageView строкой. Код выполняется, но изображение не меняется, и ничего не выводится на консоль. Пожалуйста, обратите внимание, прежде чем ответить, что изображение и переменные верны, поскольку я успешно сделал это вручную.

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Я вижу, что вы пытаетесь получить доступ к своим трем представлениям изображений, создавая строку, которая представляет их имя переменной во время выполнения. Вы не можете сделать это. Вероятно, самый простой подход - это поместить ваши три изображения в NSArray; затем вы можете получить доступ к каждому представлению изображения, перечислив массив:

NSArray *imageViews = @[self.c1,self.c2,self.c3];
for (UIImageView *imageView in imageViews) { 
    [imageViews setImage:[UIImage imageNamed:@"defaultphoto.jpg"]];
}
0 голосов
/ 05 марта 2020

Я понял, это будет работать в соответствии с вашими требованиями.

Просто назначьте тег для этих трех UIImageView, как показано ниже

c1.tag=1;
c2.tag=2;
c3.tag=3;

Затем вы назначите новые изображения, как показано ниже пример

for(int i = 0; i < 3; i++){ 

         //NSString *id = [NSString stringWithFormat:@"c%i" , i];
int tagId = i+1;//just to add increament for getting tag which starts from 0, you can change it to zero as well
         //UIImageView *imageViewInLoop = [self valueForKey:id];
         //[imageViewInLoop setImage:[UIImage imageNamed:@"defaultphoto.jpg"]];
[((UIImageView*)[self.view viewWithTag:tagId])setImage:[UIImage imageNamed:@"defaultphoto.jpg"]]; 
     }
0 голосов
/ 05 марта 2020

Чтобы получить доступ к свойствам по их именам, используйте KeyValueCoding , чтобы получить imageView по имени свойства, используйте valueForKey:, метод do:

     for(int i = 0; i < 3; i++){ 

         NSString *id = [NSString stringWithFormat:@"c%i" , i];

         UIImageView *imageViewInLoop = [self valueForKey:id];

         [imageViewInLoop setImage:[UIImage imageNamed:@"defaultphoto.jpg"]];

     }
...