Подвид UIView не отвечает на изменения - PullRequest
0 голосов
/ 10 марта 2011

Я учусь обращаться с подпредставлениями, и мне трудно манипулировать позицией одного из них. Каждое подпредставление имеет уникальный тег. Стоит отметить, что я ищу подпредставления в 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]);

или

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];
      }
    }
   }
 }

Любая помощь с благодарностью.

Mike

РЕДАКТИРОВАТЬ: с консоли на исполнение

2011-03-10 19: 53: 42,344 mike = метка UILabel = 6 0x4b59610
2011-03-10 19: 53: 42,344 метка = 842 метка = 6 0x4b59610
2011-03-10 19: 53: 42.345 0-subview = тег PerformAnalysisCustomCell = 0
2011-03-10 19: 53: 42.345 1-subview = тег UIGroupTableViewCellBackground = 0
2011-03-10 19: 53: 42.346 2-subview = тег UIView = 0 0x4d62910
2011-03-10 19: 53: 42.349 1-подпредставление = тег UITableViewCellContentView = 0
2011-03-10 19: 53: 42.349 2-subview = UILabel tag = 0 0x4b51320
2011-03-10 19: 53: 42.350 2-subview = тег UILabel = 1 0x4b59290
2011-03-10 19: 53: 42.350 2-subview = тег UILabel = 2 0x4b59370
2011-03-10 19: 53: 42.358 2-subview = UILabel tag = 3 0x4b59410
2011-03-10 19: 53: 42.359 2-subview = UILabel tag = 4 0x4b594b0
2011-03-10 19: 53: 42.360 2-подпредставление = тег UILabel = 5 0x4b59560
2011-03-10 19: 53: 42.360 2-подпредставление = тег UILabel = 6 0x4b59610

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

Ответы [ 3 ]

0 голосов
/ 10 марта 2011

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

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

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

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

0 голосов
/ 10 марта 2011

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

0 голосов
/ 10 марта 2011

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

...