2014-11-20 3 views
-1

Я пробовал столько, сколько я нашел решение для решения этой проблемы. Мой последний код шоу удар:UITableview не обновляет пользовательскую ячейку uitableviewcell из раскадровки

static NSString *simpleTableIdentifier = @"cell"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    [[cell viewWithTag:1000] removeFromSuperview]; 
     [[cell viewWithTag:2000] removeFromSuperview]; 

    // other code for setting view that works perfect then 
    if(some condition){ 
    UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom]; 
     [btn setImage:[UIImage imageNamed:@"upgrey.png"] forState:UIControlStateNormal]; 
     btn.frame=upButton.frame; 
     [btn addTarget:self action:@selector(upButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell addSubview:btn]; 
     UIButton *btn2=[UIButton buttonWithType:UIButtonTypeCustom]; 
     [btn2 setImage:[UIImage imageNamed:@"downgrey.png"] forState:UIControlStateNormal]; 
     btn2.frame=downButton.frame; 
     [btn2 addTarget:self action:@selector(downButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell addSubview:btn2]; 
     btn.tag=1000; 
     btn2.tag=2000; 
    } 

    return cell; 

, но это не работает. если я добавляю [[cell viewWithTag: 1000] removeFromSuperview]; [[cell viewWithTag: 2000] removeFromSuperview];

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

+0

Где вы хотите, чтобы эти кнопки отображались? Ваши результаты - именно то, что я ожидаю. – woz

+0

Я хочу показать эти кнопки как часть ячейки таблицы, если условие истинно. но если я добавлю [[cell viewWithTag: 1000] removeFromSuperview]; [[cell viewWithTag: 2000] removeFromSuperview]; линий. он не показывает кнопки в виде таблицы. И если я не добавляю эти строки. он показывает кнопку в большинстве ячеек таблицы, когда я прокручиваю вверх или вниз. –

+0

Правильно, используя 'removeFromSuperview' удаляет кнопки. – woz

ответ

3

Даже если вы уже приняли свой собственный ответ, я попробую объяснить, почему у вас была эта проблема и как вы можете лучше структурировать свои UITableView s в будущем.

Причина, по которой «он показывает все ячейки с этими двумя кнопками», когда у вас нет этих линий removeFromSubview, потому что, реализуя dequeueReusableCellWithIdentifier:, вы повторно используете свои ячейки и их содержимое. Повторное добавление одного и того же поднабора во время каждого вызова cellForRowAtIndexPath делает тот факт, что вы повторно используете ячейки совершенно бессмысленно, так как вы ничего не используете в них. Поэтому либо не используйте повторно свои ячейки вообще, либо, тем лучше, поскольку содержимое каждой ячейки точно такое же, do повторно использовать ваши ячейки и также повторное использование этих кнопок.

Есть два хороших способа сделать это. Один из способов сделать это - создать пользовательский подкласс UITableViewCell. Но так как содержимое ваших ячеек довольно просто, и вы говорите, что ваш else условный уже работает, я предлагаю другой способ, который может быть немного менее интенсивным с кодовым. Вот мое предложение:

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

    // Create two identifiers -- one for "some condition" one 
    // for the "other condition" 
    static NSString *simpleTableIdentifier1 = @"cell1"; 
    static NSString *simpleTableIdentifier2 = @"cell2"; 

    if (some condition) { 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier1]; 

     // Only add the buttons when cell == nil, i.e. during the first 
     // time cell's initialized to hold a UITableViewCell 
     if (cell == nil) { 

      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier1] 

      UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom]; 
      [btn setImage:[UIImage imageNamed:@"upgrey.png"] forState:UIControlStateNormal]; 
      btn.frame=upButton.frame; 
      [btn addTarget:self action:@selector(upButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
      [cell addSubview:btn]; 
      UIButton *btn2=[UIButton buttonWithType:UIButtonTypeCustom]; 
      [btn2 setImage:[UIImage imageNamed:@"downgrey.png"] forState:UIControlStateNormal]; 
      btn2.frame=downButton.frame; 
      [btn2 addTarget:self action:@selector(downButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
      [cell addSubview:btn2]; 
     } 

    } else { 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier2]; 

     if (cell == nil) { 

      .... 
+0

Это хороший ответ. так как я решил проблему таким же образом. я делаю ваш ответ как правильно. Потому что вы очень хорошо разработали проблему. –

+1

@ImranAhmed Спасибо :) –

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