Подпросмотры iOS view не распознают членов пользовательского класса

#iphone #objective-c #ios #ipad

#iPhone #objective-c #iOS #iPad

Вопрос:

Я создаю подкласс UIView и имею элемент NSString с именем imgName; Все просмотры, добавленные в superview, являются MyCustomView;

Я делаю это:

 NSArray *arr = [view subviews];

for (int x = 0; x < [arr count]; x  )
{
   MyCustomView *view = [arr objectAtIndex:x];
   NSString *imgName = view.imgName;  <-- Unrecognized selector

}
  

Я действительно хочу получить доступ к этому члену. Если бы я сохранил другой запущенный список имен изображений подпросмотров, это было бы проблематично, потому что мне также пришлось бы поддерживать их расположение в иерархии представлений (поскольку я хочу, чтобы иерархия представлений была такой же, как в zIndexes).

Как я могу получить строку из [просмотр подпросмотров]?

Комментарии:

1. Можете ли вы опубликовать определение класса для MyCustomView или, более конкретно, как вы объявляете этот элемент?

Ответ №1:

Вы должны дважды проверить, что подпредставление имеет правильный тип. Вы можете выполнить эту проверку с помощью чего-то вроде этого:

 for ( int x = 0; x < [arr count];   x )
{
    UIView *subView = [arr objectAtIndex:x];
    if ( [subView class] == [MyCustomView class] )
    {
        //Perform actions on the view as needed
    }
}
  

Скорее всего, существует подпросмотр, который не относится к вашему MyCustomView типу, и когда он пытается выполнить приведение и получить доступ к этому члену, он не может, потому что это неподходящий тип.

РЕДАКТИРОВАТЬ: Вы упомянули, что все добавленные вами вложенные просмотры являются MyCustomView . Я лично не стал бы доверять структуре iOS, чтобы в ней не было подпросмотров, уже встроенных в UIView

Комментарии:

1. Это была именно та проверка, которая мне была нужна. Действительно, похоже, что iOS добавляет UIView по умолчанию где-то там.