проблема с удалением UILabel из View - PullRequest
1 голос
/ 03 июня 2011

У меня есть UILabel на мой взгляд.Я хочу удалить UILabel, если вызывается определенная функция.Я пробовал несколько способов, но он не работает!

Коды пробовали:

[[self.view viewWithTag:1] setHidden:YES]; 

или

label.hidden=YES;

или

[label removeFromSuperview];

Я перепробовал все эти коды, но безрезультатно.Кто-нибудь может сообщить мне, что мне здесь не хватает?Спасибо.

Другая часть моего кода:

UILabel *startLabel=[[[UILabel alloc] initWithFrame:CGRectMake(55, 45, 300, 30)] autorelease];    
UILabel *startLabel2=[[[UILabel alloc] initWithFrame:CGRectMake(40, 65, 300, 30)] autorelease];

if ((internetActive==NO)||(hostActive==NO)) {

    status=1;
    //add the label

    startLabel.text=@"Cannot connect to server.";
    startLabel.backgroundColor=[UIColor clearColor];
    startLabel.textColor=[UIColor whiteColor];
    startLabel.font=[UIFont systemFontOfSize:18];
    startLabel.tag=1;

    [self.view addSubview:startLabel];



    startLabel2.text=@"Please check your connection.";
    startLabel2.backgroundColor=[UIColor clearColor];
    startLabel2.textColor=[UIColor whiteColor];
    startLabel2.font=[UIFont systemFontOfSize:18];
    startLabel2.tag=2;

    [self.view addSubview:startLabel2];

    startLabel.hidden=NO;
    startLabel2.hidden=NO;

}

else if ((internetActive==YES) &&(hostActive==YES))
{
    if(status==1)
    {

        //[startLabel removeFromSuperview];
        //[startLabel2 removeFromSuperview];

        //[[self.view viewWithTag:1] setHidden:YES];
        //[[self.view viewWithTag:2] setHidden:YES];

        NSLog(@"INSIDE!");

        startLabel.hidden=YES;
        startLabel2.hidden=YES;

        [startLabel removeFromSuperview];
        [startLabel2 removeFromSuperview];

    }

Ответы [ 2 ]

6 голосов
/ 03 июня 2011

Все перечисленные вами методы работают.Поэтому я боюсь, что вы не ищете свою ошибку в нужном месте.

Убедитесь, что:

  1. получаемый вами экземпляр label является хорошим
  2. есть только один label экземпляр (вы можете просто удалить дубликат, который вы случайно вставили ...)

Один очень эффективный способ отладки такого родаиз проблем (я делаю это много раз в день ...):

  1. поставить точку останова, где вы удаляете метку
  2. при достижении точки останова, введите эту командув консоли gdb:

    > po [[self view] recursiveDescription]
    

    recursiveDescription отобразит дерево [self view] подпредставлений, с адресами и многими полезными сведениями, такими каккоординаты ... скрытые ... Это позволит вам четко понять, что происходит в этом представлении.

  3. перейти к следующему шагу после того, как вы removeFromSuperview позвоните,сыграйте снова команду и посмотрите, что изменилось ... или нет.Внимательно проверяйте адреса объектов.

Изучите GDB и отладку в целом, и вам больше никогда не придется задавать такие вопросы:)

4 голосов
/ 03 июня 2011

весь этот код в одном методе?Если да, вы создаете новые startLabel и startLabel2 и пытаетесь удалить их в части кода else, но это не те метки, которые вы добавили в качестве подпредставлений.Сделайте метки членами класса и размещайте их только один раз в методе init/viewDidLoad.

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