Подвид UIView не отвечает на изменения

Я учусь обрабатывать подпредставления, и мне трудно манипулировать положением одного из них. Каждое подпредставление имеет уникальный тег. Стоит отметить, что я ищу подпредставления в UITableCell, UITableView имеет около 5 строк.

Если я сделаю это:

UIView *mike = [self.view viewWithTag:6];
mike.frame = CGRectMake(250, 5, 25, 20);
mike.backgroundColor = [UIColor redColor];
NSLog(@"mike=%@ tag=%d",[[mike class] description], [mike tag]);

or:

UILabel *label = (UILabel *)[self.view viewWithTag:6];
label.frame = CGRectMake(250, 5, 25, 20);
label.backgroundColor = [UIColor redColor];
NSLog(@"label=%@ tag=%d",[label text], [label tag]);

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

for (UIView *subview0 in [self.view subviews])
{
  for (UIView *subview1 in [subview0 subviews])
  {
    for (UIView *subview2 in [subview1 subviews])
    {
      if ([[[subview2 class] description] isEqualToString: @"UILabel"]) 
      {
        [subview2 setText:@"mike"];
        subview2.frame = CGRectMake(250, 5, 25, 20);
        subview2.backgroundColor = [UIColor redColor];
      }
    }
   }
 }

Любая помощь очень ценится.

Майк

РЕДАКТИРОВАТЬ: из консоли при выполнении

2011-03-10 19:53:42.344 mike=UILabel tag=6 0x4b59610
2011-03-10 19:53:42.344 label=842 tag=6 0x4b59610
2011-03-10 19:53:42.345 0-subview=PerformAnalysisCustomCell tag=0
2011-03-10 19:53:42.345 1-subview=UIGroupTableViewCellBackground tag=0
2011-03- 10 19:53:42.346 2-subview=UIView tag=0 0x4d62910
10.03.2011 19:53:42.349 1-subview=UIViewCellContentView tag=0
2011-03-10 19:53:42.349 2 -subview=UILabel tag=0 0x4b51320
2011-03-10 19:53:42.350 2-subview=UILabel tag=1 0x4b59290
2011-03-10 19:53:42.350 2-subview=UILabel tag= 2 0x4b59370
10 марта 2011 г., 19:53:42.358 -03-10 19:53:42.360 2-subview=UILabel tag=5 0x4b59560
2011-03-10 19:53:42.360 2-subview=UILabel tag=6 0x4b59610

После помещения %p в NSLog адрес адреса памяти будет таким же. Другие строки с тегом = 6 имеют разные адреса, поэтому я должен ожидать, что по крайней мере эта ячейка переместится.


person hydev    schedule 10.03.2011    source источник
comment
Является ли self.view tableView? Являются ли теги уникальными даже во всех ячейках таблицы? Где вы устанавливаете тег для своего ярлыка?   -  person GendoIkari    schedule 10.03.2011
comment
Да, это. Каждый тег уникален для ячейки, но не для всей таблицы, поскольку ячейка таблицы повторяется. Я устанавливаю тег в IB.   -  person hydev    schedule 10.03.2011
comment
Ах... тогда вам нужно сделать viewWithTag только для 1 ячейки, а не для всего tableView. Если вы сделаете viewWithTag для tableView, вы получите только первый экземпляр этой метки, с которым он встретится.   -  person GendoIkari    schedule 10.03.2011


Ответы (3)


Вам нужно запустить оператор viewWithTag для каждой ячейки, а не для всего tableView. Это, скорее всего, должно быть установлено в cellForRowAtIndexPath, а затем вы будете перезагружать строки, которые изменились, когда вам нужно.

person GendoIkari    schedule 10.03.2011

Я предпочитаю подкласс UITableViewCell, тогда я могу получить доступ к тому, что хочу, по свойствам. Мне не нравится -viewWithTag:, раньше это доставляло мне проблемы и затрудняло управление кодом.

person AechoLiu    schedule 10.03.2011

Ваши первые два примера делают то же самое. Статический тип (UIView* против UILabel*) не меняет код, который в этом случае создает компилятор.

Третий пример должен NSLog для каждого представления, с которым он работает. Возможно, тег не установлен.

Также имеет смысл проверить что-то вроде if (subview2.tag == 6), чтобы увидеть, есть ли несколько представлений с одним и тем же тегом (похоже, есть).

Ваши сообщения журнала также могут печатать описание представления (или просто адрес представления в формате «%p»), чтобы увидеть, совпадают ли используемые вами представления.

person tc.    schedule 10.03.2011
comment
Спасибо! Я добавил некоторый вывод выше, где вы можете увидеть адрес, и он отображается как минимум в одном подвиде как тот же адрес. Следовательно, это должно измениться - не так ли? - person hydev; 10.03.2011
comment
По крайней мере, одно подпредставление имеет тот же адрес, но это может быть не одно из тех изменений, которые вы видите. Ваше первоначальное утверждение о том, что каждое подпредставление имеет уникальный тег, неверно для представления, которое вы вызываете -viewWithTag: on (вы вызываете его в табличном представлении вместо ячейки?). - person tc.; 11.03.2011