2016-08-26 7 views
0

У меня возникла проблема с добавлением дополнительной метки в некоторые мои ячейки в виде таблицы. На данный момент я определить RowHeight следующим образом:Добавление метки программно в UITableViewCell?

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     let numberOfBusses = nearbyStops[indexPath.section].getDepartures()[indexPath.row]!.count 
     if (numberOfBusses > 2) { 
      return CGFloat((75/2) * numberOfBusses) 
     } else { 
      return 75 
     } 
} 

Я пытаюсь сделать это, чтобы добавить отсутствующий ярлык, но ничего не происходит:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! BusDepartureTableViewCell 
    let numberOfBusses = nearbyStops[indexPath.section].getDepartures()[indexPath.row]!.count 
      if (numberOfBusses > 2) { 
       var label = UILabel(frame: CGRectMake(0, 0, 200, 21)) 
       label.center = CGPointMake(160, 284) 
       label.textAlignment = NSTextAlignment.Center 
       label.text = "I'am a test label" 
       label.textColor = UIColor.redColor() 
       cell.foregroundView.addSubview(label) 
      } 


......... 

Что я делаю неправильно?

UPDATE:

Я сфотографировал моих нынешних достижений, и я получил клетка расширяться, однако, как вы можете видеть, есть теперь место для двух других лейблов, но как я могу добавить их?

enter image description here

+1

Я не хотел бы добавить пользовательские UIView подобное в UITableViewCell, так как клетки повторно. Проверьте рамку 'cell.foregroudView' и' label' – Larme

+0

Как бы вы это сделали? Я немного потерял, как сделать это по-другому. – Recusiwe

+1

Я бы поставил представление 'BusDepartureTableViewCell' (xib) и спрятал его, если это необходимо. – Larme

ответ

0

Клетки снова получить «б» - это означает, что для экономии памяти IOS использует ваш UI-элементы только в качестве заполнителя, и устанавливает свои значения в

cellForRowAtIndexPath 

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

Например:

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

    let item = yourPopulatingArray[indexPath.row] as Item 

    var cellIdentifier = "cellLayout1" 

    if item.anyPropertyToCheckforLayout { 
     cellIdentifier = "cellLayout2" 
    } 

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! BusDepartureTableViewCell 
+0

О, я вижу, поэтому у вас просто будет несколько разностных раскладок. Поэтому я бы просто поменял cellIndentifiers в своих if-statement? – Recusiwe

+0

да, это лучший способ сделать такие вещи – derdida

+0

Вы бы сделали это в формате .xib или? Я просто использовал раскадровки. – Recusiwe

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