2014-10-21 4 views
0

У меня есть UITableView со многими ячейками в нем. В нем есть несколько ярлыков с изображением. Но изображение не находится в каждой ячейке, поэтому у меня есть инструкция if, которая проверяет, должна ли она быть скрытой, и если мне нужно изменить ярлык влево. Что я могу сделать с этим кодом.Перемещение позиции UILabel для UITableViewCell

if (checking here not relevant) { 

     cell.liveButton.hidden = YES; 

     CGRect frame = cell.gameTimeLabel.frame; 
     frame.origin.x= 27;       // move the label 10px to the left since no image will be present 
     cell.gameTimeLabel.frame= frame; 
     NSLog(@"in here"); // Checking if this code actually runs 
    } 

Так что, когда я начала мое приложение метка еще не изменилась (но она выводит сообщение «здесь»), то у меня есть таймер, который запускает таблицу перезагрузки один раз каждые 10 секунд. И в следующий раз он обновится, когда консоль снова напечатает «здесь». Затем метки меняют место. Почему это и как я могу это исправить, чтобы метки менялись в первый раз?

Спасибо за помощь!

- (void) startTimer{ 

    [timer invalidate]; 

    timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(retrieveData) userInfo:nil repeats:YES]; 
} 

- (void) retrieveData{ 

    gamesInfoArray = [gamesInfoObject fetchData]; 

    [self.tableView reloadData]; 
} 

и в другом классе, к которому я вызвать функцию, чтобы получить информацию JSon

-(void) fetchData{ 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setHTTPMethod:@"GET"]; 
    [request setURL:[NSURL URLWithString:url]]; 

    NSError *error = [[NSError alloc] init]; 
    NSHTTPURLResponse *responseCode = nil; 

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error]; 

    if([responseCode statusCode] != 200){ 
     NSLog(@"Error getting %@, HTTP status code %li", url, (long)[responseCode statusCode]); 
    } 

    jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 

} 
+0

Вместо использования одной и той же ячейки попробуйте создать две ячейки и использовать то, что вам нужно. Один в выражении If, а другой в инструкции else. –

+0

Прошли ли вы через свой код по очереди, чтобы убедиться, что все переменные - это то, что вы ожидаете от них? Если «здесь» печатается, возможно, одна из переменных неожиданно «nil». –

+0

Но это не логично? почему значения не будут равны нулю после того, как он снова загрузит табличное представление? он делает тот же процесс снова, но я могу проверить, чтобы быть уверенным @AaronBrager –

ответ

0

Добавить хороший и простой пользовательский анимации в viewdidload после выполнения данных релоад, например:

[yourtable reloadData]; 

    CATransition *transition = [CATransition animation]; 
    transition.type = kCATransitionPush; //Change here the transition type 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.fillMode = kCAFillModeForwards; 
    transition.duration = 0.5; 
    transition.subtype = kCATransitionMoveIn; //Change here the animation to present again the cells 

    [[yourtable layer] addAnimation:transition forKey:@"UITableViewReloadDataAnimationKey"]; 

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

0

Добавить левое Препятствие на этикетку. Сделайте выход для этого ограничения.

constLabelLeft.constant = 10; // default 30 maybe 
[cell.view needsUpdateConstraints]; 
+0

Но не работает ли ограничение при работе со скрытыми выходами? Потому что я думаю, что он все еще там принимает это «пространство» –

+0

Вы измените постоянное значение. Когда изображение скрыто. Например: если значение по умолчанию 30, когда изображение скрыто 10. –

Смежные вопросы