Сложный цикл For & If, путаница, возврат и доступ к классам. Objective-C - PullRequest
0 голосов
/ 02 июня 2011

У меня есть вид, который имеет несколько подпредставлений.Мне нужно найти конкретный UIImageView с определенным UIImage.

Вот код, который я использую для циклического просмотра:

BOOL fileExistsAtLocation;
for (id subview in drawGallery.subviews){
    if ([[subview class] isSubclassOfClass: [UIImageView class]]){
        // I need to detect the subview's image property to see if it matches.
    }
}

Я пробовал

if(subview.image == [UIImage imageNamed:image]){

}

Но мне говорят, что изображение не является частью структуры, что понятно, поскольку все подпредставления в основном имеют тип UIView.Как я нацеливаюсь только на UIImageViews и затем проверяю их свойство изображения?

Что касается ответа 'tag', я попробовал следующий код:

BOOL fileIsAtLocation;
for (id subview in drawGallery.subviews){
    if ([subview isKindOfClass:[UIImageView class]]){
        if ((UIView *)subview.tag){
            NSLog(@"FOUND");
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 02 июня 2011

[UIImage imageNamed: image] вернет новый экземпляр этого изображения, поэтому он НИКОГДА не будет равен. Я бы предложил пометить все ваши подпредставления. Поэтому, когда вы создаете виды изображений, присвойте уникальный тег (это может быть просто число с автоматическим увеличением). Затем вы можете обнаружить интерес на основе тега.

BOOL fileExistsAtLocation;
for (id subview in drawGallery.subviews){
    if ([subView isKindOfClass:[UIImageView class]){
        // I need to detect the subview's image property to see if it matches.
        if([(UIView *)subView tag] == uniqueIDAssignedToImage) {
            // You have found your view   
        }
    }
}

Также используйте isKindOfClass для проверки типа класса.

Надеюсь, это поможет.

0 голосов
/ 02 июня 2011

Вы пытались использовать преобразование типов?

if(((UIImageView *)subview).image == [UIImage imageNamed:image]){

}

UPDATE:

  • Вы также можете попробовать изменить логику итерации:

    for (UIView *subview in drawGallery.subviews) {

  • Если вам нужно найти один вид с тегом, попробуйте

    UIImageView *imageViewISearchFor = [drawGallery viewWithTag:uniqueIDAssignedToImage];

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