viewWithTag и addSubview - PullRequest
       5

viewWithTag и addSubview

3 голосов
/ 14 марта 2012

Я пытаюсь повторно использовать метку, вызывая viewWithTag, когда нажимаю кнопку UIB. Код выглядит нормально, когда он выполняется в первый раз, но протекает ли он при выполнении несколько раз из-за строки 7? Также лучше просто удалить метку из superview, alloc и addSubview вместо использования viewWithTag?

1. UILabel *label = (UILabel *)[self.view viewWithTag:100];
2. if(label == nil) {
3.   label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease];
4.   label.tag = 100;
5. }
6. 
7. [self.view addSubview:label];

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Переместите код [self.view addSubview:label]; в свой блок if. Если ваше условие if ложно, это означает, что метка уже является частью иерархии представлений вашего viewcontroller, поэтому, если вы добавите ее снова, как в исходном коде, она будет сохранена дважды.

UILabel *label = (UILabel *)[self.view viewWithTag:100];
if (!label) {
    label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease];
    label.tag = 100;
    [self.view addSubview:label];
}
0 голосов
/ 14 марта 2012

Если вы используете .xib или раскадровку, просто свяжите их с IBOutlet.

Если вы используете только код, попробуйте сохранить его как личную переменную.

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