2015-12-16 7 views
0

Я пытаюсь добавить некоторые подпрограммы в свой UITableViewCell. Количество подзаголовков основано на моих данных. Когда я прокручиваю вниз, subviews исчезает и больше не отображается. Добавление их в NIB не является вариантом, потому что я только сейчас количество подзапросов во время выполнения, и они разные для каждой ячейки.Динамически добавить subview в UITableViewCell

Каков правильный способ добавления неизвестного количества подпунктов к UITableViewCell во время выполнения?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"DetailCell"; 

    DetailCellTableViewCell *cell = (DetailCellTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) 
    { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DetailCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 


     NSInteger count = [self getMaxSubviews]; 
     NSInteger y=100; 

     for (int i=0; i<count;i++) 
     { 
      UITextField *dataS = [[UITextField alloc] init]; 

      dataS.frame=CGRectMake(277, y, 60, 17); 

      y=y+17; 

      dataS.tag=i+1337; 
      dataS.backgroundColor=[UIColor redColor]; 

      [cell addSubview:dataS]; 
     } 
    } 


    if (!useOrigCellFromNib) // Here I can use the original Nib created by IB 
    { 

     NSString *data = @"Some String"; 

     [cell.data setText:data]; 


    } 
    else // Use added subviews! 
    { 

     for (int i=0;i<arrS.count;i++) 
     { 
      NSManagedObject *s = [arrS objectAtIndex:i]; 


      UITextView *dataS =[cell viewWithTag:i+1337]; 

      dataS.text=[NSString stringWithFormat:@"%ld foo", (long)i]; 
      [cell.data setHidden:YES]; 

     } 

    } 

    return cell; 
} 
+0

, где сделал и объявить ячейку? –

+0

Обновлено на основе вашего комментария. Fogotten для вставки объявляемой части ячейки. – lueda

ответ

0

Like Игорь упомянул, что при повторном использовании ячейки вам нужно удалить waht, когда вы добавляете предыдущее, и воссоздаете subviews. Может быть, вы не можете использовать класс loadFromNib и Subclass 'UITableViewCell' и создать свою ячейку.

Это пример быстрым, но логика одинакова для ObjC слишком

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let stuffArray = array[indexPath.row] 

    var cell = tableView.dequeueReusableCellWithIdentifier("Cell") 
    if cell == nil { 
     cell = MyCustomCell(initWithDaraArray:stuffArray) // create cell based on array data dynamically 

    } else { // even if you have cell you need to refresh it for new data 
     cell.refreshDataForDataInArray(stuffArray) // here remove all subviews and create new ones 
    } 

    return cell 
} 

и высоты клеток можно регулировать с помощью

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    let stuffArray = array[indexPath.row] 
    return calculatedHeight(stuffArray) 
} 
0

1 вы должны повторно использовать клетки, вызовите tableView.dequeueReusableCellWithIdentifier ("CellID")

2 после того, как вы получите повторно использовать ячейку, вы должны удалить все ранее добавленный пользовательский подвиды

3 после того, что вы можно добавлять новые подвиды

о «прокручивает вниз подвиды исчезает и не проявляет больше» Я не вижу никаких переменный «клетки» перед

if (cell == nil) 

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

+0

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

+0

также я не вижу, как переменная useOrigCellFromNib изменяется в вашем коде? – Igor

+0

И где вы взяли массив arrS? Укажите полный исходный код – Igor

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