2013-08-20 2 views
0

Я добавил UIButton в каждую строку uitableview, но когда i nedd reloadData, uibutton равен 0x0000. Можете ли вы дать мне какие-либо предложения? Большое спасибо. Я использовал этот код:UIButton - 0x0000 при перезагрузке TableView в ios

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    /*NSString *CellIdentifier = [NSString stringWithFormat:@"%d,%d",indexPath.section,indexPath.row]; 
    // NSString *CellIdentifier = @"cell"; 
    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    {*/ 
    NSString *CellIdentifier = [NSString stringWithFormat:@"%d,%d",indexPath.section,indexPath.row]; 
    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 


     UILabel *pricelabel = [[UILabel alloc] initWithFrame:CGRectMake(80, 0, 80, 30)]; 
     pricelabel.backgroundColor = [UIColor clearColor]; 
     pricelabel.font = [UIFont fontWithName:@"Helvetica" size:16]; 
     pricelabel.font = [UIFont boldSystemFontOfSize:16]; 
     pricelabel.textColor = [UIColor darkGrayColor]; 
     pricelabel.tag = 3000; 
     //pricelabel.hidden = YES; 
     pricelabel.textAlignment = NSTextAlignmentRight; 
     [cell.contentView addSubview: pricelabel]; 
     [pricelabel release]; 


     UIButton * market = [[UIButton alloc] init];; 
     [market setFrame:CGRectMake(200, 6, 30, 30)]; 
     market.tag = 4000; 

     [market addTarget:self action:@selector(marketPressedAction:) forControlEvents:UIControlEventTouchDown]; 

     // [market setTag:indexPath.row]; 

     [cell.contentView addSubview:market]; 
    } 


    if([priceNewArray count]> 0) 
    { 
     UILabel *pricelbl = (UILabel*)[cell.contentView viewWithTag:3000]; 
     pricelbl.text =[NSString stringWithFormat:@"$%@",[priceNewArray objectAtIndex:indexPath.row]]; 
     if ([sellingArray count]>0) { 
      if([[sellingArray objectAtIndex:indexPath.row] isEqualToString:@"2"]){ 
       pricelbl.hidden = NO; 
      } 
      else if([[sellingArray objectAtIndex:indexPath.row] isEqualToString:@"0"]){ 
       pricelbl.hidden = YES; 

     } 

    } 


    } 
    UIButton *marketButton = (UIButton*)[cell.contentView viewWithTag:4000]; 
    [marketButton setTag:indexPath.row]; 
    if([sellingArray count]>0) 
    { 
     NSLog(@"sellingArray %@",sellingArray); 
     if([[sellingArray objectAtIndex:indexPath.row] isEqualToString:@"0"]) // nothing 
     { 

      [marketButton setSelected:NO]; 
      [marketButton setImage:[UIImage imageNamed:@"Marketplace.png"] forState:UIControlStateNormal]; 
      marketButton.enabled = YES; 

     } 
     else if([[sellingArray objectAtIndex:indexPath.row] isEqualToString:@"2"]) // marketplace 
     { 

      [marketButton setSelected:YES]; 
      [marketButton setImage:[UIImage imageNamed:@"MarketplaceSelect.png"] forState:UIControlStateNormal]; 
      marketButton.enabled = YES; 

     } 
    } 

    _tableView.contentInset = UIEdgeInsetsMake(0, 0, 100, 0); 

    return cell; 
} 

Я выше кода, когда reloadData, данные Цена этикетки изменяется в порядке, но marketbutton не изменила имидж. Я отлаживаю после звонка [_tableview reloadData];, marketButton is 0x0000.

+2

Почему вы используете другой идентификатор ячейки для каждой строки? Вы теряете выгоду от переработки клеток. Где и как вы проверяете ценность, которую вы говорите, равна нулю? – Abizern

+0

@Abizern: можете ли вы пример кода? Я новичок. Большое спасибо –

+0

Не образец кода, а подсказка. Гораздо проще создавать свои настраиваемые ячейки на раскадровке и добавлять элементы интерфейса там, а не пытаться сделать это в коде. – Abizern

ответ

0

Я думаю, что ваше сравнение неверно. Вы пытаетесь сравнить целое число со строкой.

Если я посчитал правильным, попробуйте что-то вроде этого.

int sellingPrice=0; 

if([[sellingArray objectAtIndex:indexPath.row] isEqualToString: [NSString stringWithFormat:@"%i",sellingPrice]]) // nothing 

sellingPrice=2; 

else if([[sellingArray objectAtIndex:indexPath.row] isEqualToString:[NSString stringWithFormat:@"%i",sellingPrice]]) // marketplace 
+0

Нет, если сравнение не подходит, Price label по-прежнему перезагружается? –

0

использование одного CellIdentifier для ячейки при использовании же конструкции для клетки, она используется для повторного использования Tableview клеток

NSString *CellIdentifier = @"Cell" 

удалите этот код [marketButton setTag:indexPath.row]; вы не хотите изменить тег для ячейки, не установлен тег для идентификатор для UIButton, измените это два думает, что ваш код будет работать

+0

Если я удалю [marketButton setTag: indexPath.row]; , когда я нажимаю на кнопку Marketbutton, мое приложение падает. –

+0

marketPressedAction метод найден в вашем классе? изображение кнопки изменилось или нет? – NANNAV

+0

Да, метод marketPressedAction в моем классе? Изображение кнопки не изменено –

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