2014-09-04 4 views
1

У меня есть UITableview, и я заполняю UITableview значениями из веб-службы. Мои UILABEL правильно заполнены правильными данными.Обновить UItableview не обновляет ярлык

Моя проблема в том, что когда я пытаюсь обновить ecolor UILabel, ничего не происходит?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"nil"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:nil]; 

    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] 
       initWithStyle:UITableViewCellStyleSubtitle 
       reuseIdentifier:CellIdentifier] ; 
    } 

    self.tableView.separatorInset = UIEdgeInsetsZero; 

    cell.selectionStyle = UITableViewCellSelectionStyleGray; 
    // Sets the Label for the cell 
    self.hungryPersonOrderStatusLabel = [[UILabel alloc] init]; 
    self.hungryPersonOrderStatusLabel.frame = CGRectMake(80, 30, 150, 25); 
    self.hungryPersonOrderStatusLabel.backgroundColor = [UIColor clearColor]; 
    self.hungryPersonOrderStatusLabel.textAlignment = NSTextAlignmentJustified; 
    self.hungryPersonOrderStatusLabel.font = [UIFont fontWithName:@"SegoeWP" size:13.0]; 
    self.hungryPersonOrderStatusLabel.textAlignment = NSLineBreakByTruncatingTail; 
    self.hungryPersonOrderStatusLabel.numberOfLines = 1; 
    self.hungryPersonOrderStatusLabel.text = [[self.viewOrderUserArray valueForKey:@"OrderStatus"] objectAtIndex:[indexPath row]]; 
    self.hungryPersonOrderStatusLabel.tag = 1001; 
    self.hungryPersonOrderStatusLabel.textColor = [UIColor appGreenColor]; 
    [cell.contentView addSubview:self.hungryPersonOrderStatusLabel]; 
} 

-(void)getOrderDetails 
{ 

    [self showSpinner]; 

    DeliNinjaWebService *webService = [DeliNinjaWebService alloc]; 

    [webService viewOrderDetails:self.deli.deliId success:^(NSArray *response) 
    { 

     NSLog(@"Response Object %@",response); 

     [self hideSpinner]; 

     self.viewOrderDetailsArray = [response mutableCopy]; 
     self.viewOrderUserArray = [[response valueForKeyPath:@"Orders"] mutableCopy]; 

     NSString *orderStatusString = [[self.viewOrderUserArray valueForKey:@"OrderStatus"] componentsJoinedByString:@""]; 

     if ([orderStatusString isEqualToString:@"In Progress"]) 
     { 

      self.hungryPersonOrderStatusLabel.textColor = [UIColor appRedColor]; 
      [self.tableView reloadData]; 
     } 

     [self.tableView reloadData]; 

    } failure:^(NSString *error) 
    { 
     [self hideSpinner]; 

     NSLog(@"Fail %@", error); 

    } noConnection:^ 
    { 
     [self hideSpinner]; 

     [self showMessage:@"No Connection Error" Message:@"Please check your internet connection"]; 
    }]; 
} 

и я попытался добавить ярлык здесь, а затем добавить подвью, но ничего не произошло, так как табличное представление не обновлялось.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"nil"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:nil]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     self.hungryPersonOrderStatusLabel = [[UILabel alloc] init]; 
     self.hungryPersonOrderStatusLabel.frame = CGRectMake(80, 30, 150, 25); 
     self.hungryPersonOrderStatusLabel.backgroundColor = [UIColor clearColor]; 
     self.hungryPersonOrderStatusLabel.textAlignment = NSTextAlignmentJustified; 
     self.hungryPersonOrderStatusLabel.font = [UIFont fontWithName:@"SegoeWP" size:13.0]; 
     self.hungryPersonOrderStatusLabel.textAlignment = NSLineBreakByTruncatingTail; 
     self.hungryPersonOrderStatusLabel.numberOfLines = 1; 
     self.hungryPersonOrderStatusLabel.tag = 1001; 
     self.hungryPersonOrderStatusLabel.textColor = [UIColor appGreenColor]; 
     [self.hungryPersonOrderStatusLabel setTag:999]; 
    } 

    UILabel *label = (UILabel *)[cell.contentView viewWithTag:999]; 
    label.text = [[self.viewOrderUserArray valueForKey:@"OrderStatus"] objectAtIndex:[indexPath row]]; 

} 

enter image description here

ответ

2

Это просто ошибка как: -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"nil"; 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:nil]; 
    ...... 
    self.hungryPersonOrderStatusLabel.textColor = [UIColor appGreenColor]; 
} 

-(void)getOrderDetails { 
[self showSpinner]; 

if ([orderStatusString isEqualToString:@"In Progress"]) { 
    self.hungryPersonOrderStatusLabel.textColor = [UIColor appRedColor]; 
    [self.tableView reloadData]; 
    } 
    ...... 
} 

Во-первых, в методе cellForRowAtIndexPath ваш цвет ярлыка настройки зеленый, а затем в методе getOrderDetails ваша настройка цвета вашей метки красная, но по мере перезагрузки, тогда она снова будет только зеленого цвета. Поэтому в конце никакого изменения цвета не будет.

Таким образом, вы должны принять флаг Его, а именно, statusFlag (первоначально это будет ложью), так код будет (в методе cellForRowAtIndexPath)

if(statusFlag) 
    self.hungryPersonOrderStatusLabel.textColor = [UIColor appGreenColor]; 
else 
    self.hungryPersonOrderStatusLabel.textColor = [UIColor appRedColor]; 

Также в урах метода cellForRowAtIndexPath,

self.hungryPersonOrderStatusLabel.backgroundColor = [UIColor clearColor]; //Which is clear and not changing it at any place. 

Таким образом, вы можете изменить его так же, как с условием и флагом.

+0

Спасибо. Да, моя проблема заключалась в установке цвета текста в методе CellForRow таблицы. Когда я перезагружу свой табличный просмотр, он снова прочитает код в этом методе. – CapeFurSeal

+0

Ваш прием !!! – nikhil84

0

попробовать это ..

после изменения цвета этикетки вы перегрузочные вид таблицы, так что цвет этикетки снова установить на то, что вы указали в cellForRowAtIndexPath method.so удалить линия

self.hungryPersonOrderStatusLabel.backgroundColor = [UIColor clearColor]; in `cellForRowAtIndexPath` method 

место, линия в viewDidload или viewWillAppear методов

0

вы забыли установить [cell.contentView addSubview:self.hungryPersonOrderStatusLabel]; в вашей второй части

if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    self.hungryPersonOrderStatusLabel = [[UILabel alloc] init]; 
    self.hungryPersonOrderStatusLabel.frame = CGRectMake(80, 30, 150, 25); 
    self.hungryPersonOrderStatusLabel.backgroundColor = [UIColor clearColor]; 
    self.hungryPersonOrderStatusLabel.textAlignment = NSTextAlignmentJustified; 
    self.hungryPersonOrderStatusLabel.font = [UIFont fontWithName:@"SegoeWP" size:13.0]; 
    self.hungryPersonOrderStatusLabel.textAlignment = NSLineBreakByTruncatingTail; 
    self.hungryPersonOrderStatusLabel.numberOfLines = 1; 
    self.hungryPersonOrderStatusLabel.tag = 1001; 
    self.hungryPersonOrderStatusLabel.textColor = [UIColor appGreenColor]; 
    [self.hungryPersonOrderStatusLabel setTag:999]; 
    [cell.contentView addSubview:self.hungryPersonOrderStatusLabel]; // <------ 
} 

otherway ваш

UILabel *label = (UILabel *)[cell.contentView viewWithTag:999]; 

не найдет ярлык;)

и ... почему использование

self.hungryPersonOrderStatusLabel.tag = 1001; 

и

[self.hungryPersonOrderStatusLabel setTag:999]; 

? ;)

также не нужно звонить [self.tableView reloadData]; в if-statement, потому что вы снова вызываете его следующей строкой.

if ([orderStatusString isEqualToString:@"In Progress"]) { 

    self.hungryPersonOrderStatusLabel.textColor = [UIColor appRedColor]; 
    [self.tableView reloadData]; // <---- 
} 

[self.tableView reloadData]; 

и включите оба заявления

[self.tableView reloadData]; 
if ([orderStatusString isEqualToString:@"In Progress"]) 
{ 
    self.hungryPersonOrderStatusLabel.textColor = [UIColor appRedColor]; 
} 

и, возможно, вам не нужно даже назвать reloadData здесь, если только изменение цвета и вы держите этикетку как собственность