Локальная переменная addSubview

#iphone #objective-c #memory-management #uiview

#iPhone #objective-c #управление памятью #uiview

Вопрос:

например, существует ли метод addLabel:

 - (void)addLabel {
   for (NSInteger i = 0; i < 5; i   ) {
       UILabel *label = [[UILabel alloc] init];
       [label setText:@"label"];
       [[self view] addSubView:label];
       [label release];
   }
}
  

и метод вызывается всякий раз, когда нажимается кнопка.
Нужно ли сначала удалять все метки из вложенных представлений (removeFromSuperview:), прежде чем снова добавлять SUBVIEW?

Ответ №1:

Во-первых, вы должны присвоить UILabel некоторую координату. Чтобы она могла отображаться в нужном месте.

Для этого вы можете использовать следующую строку:

UILabel *lblTaskTitle = [[Выделение UILabel] initWithFrame:CGRectMake(45.0, 5, 200.0, 35.0)];

Другое дело, что будет лучше, если вы удалите другой ярлык. (В этом нет необходимости, но это хорошая практика).

Вы можете сделать это следующим образом:

     UILabel *lbl = nil;

    NSArray *Arraylbl = [self.view subviews];
    for (lbl in Arraylbl){
        if ([lbl isKindOfClass:[UILabel class]]){
            [lbl removeFromSuperview];
        }
    }
  

Надеюсь, у вас все будет хорошо.

Дайте мне знать в случае возникновения каких-либо трудностей.

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

1. проблема в том, что в [self.view subviews] нет никакой метки. Я проверил это в NSLog

2. Если вы вызовете вышеуказанную функцию, то она, если метка существует, будет удалена только она. в противном случае никаких проблем нет. Дайте мне знать, если у вас возникнут трудности.

Ответ №2:

Да, вы должны удалить все предыдущие метки из super view, иначе все они будут добавлены поверх предыдущих существующих меток, поэтому новые метки не будут понятны.