2016-06-23 1 views
1

Я использую tableview. Иногда мои данные получают ошибку, потому что это пустые данные. Когда я получаю пустые данные, я хочу вернуть 1 или более ячеек и показать пустые информационные данные, такие как «Нет данных!».Swift: Как я могу заполнить ячейку, когда данные пустые?

Код:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    var a:Int = 0 

     if segmentControl.selectedIndex == 0 { 
      a = 8 
      return a 
     }else if segmentControl.selectedIndex == 1{ 
      a = 4 
      return a 
     }else if segmentControl.selectedIndex == 2{ 
      a = 2 
      return a 
     }else if segmentControl.selectedIndex == 3{ 
      a = 1 
      return a 
     } 

    return a 
} 

После затем 0, все Datas пусты. Я пытаюсь вернуть клетку, и я использую этот код в cellForRowAtIndexPath:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("knockoutsCell", forIndexPath: indexPath) as! KnockoutsTableViewCell 

    let item = knockoutsTableArray[indexPath.row] 
    if knockoutsTableArray.count == 0{ 
     cell.dateLabel.text = "Date" 
     cell.homeImage.image = UIImage(named: "imagePic.png") 
     cell.homeLabel.text = "Empty data!" 

    }else{ 
    if item.playing == true{ 
     cell.dateLabel.text = item.date 
     cell.homeImage.image = UIImage(named: "\(item.homeName)") 
    } 
    } 

    return cell 
} 

Я нашел решение и сделал это благодаря Sethmr. Вот мой рабочий код:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    if knockoutsTableArray.count != 0 { 
     return knockoutsTableArray.count 
    } else{ 
     if segmentControl.selectedIndex == 0{ 
      return 8 
     }else if segmentControl.selectedIndex == 1{ 
      return 4 
     }else if segmentControl.selectedIndex == 2{ 
      return 2 
     }else{ 
      return 1 
     } 
    } 
} 

Также я переехал значение item в cellForRowAtIndexPath сверху и он работал. Я назвал элемент, когда он не пуст.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("knockoutsCell", forIndexPath: indexPath) as! KnockoutsTableViewCell 

    if knockoutsTableArray.count == 0{ 
     cell.dateLabel.text = "Date" 
     cell.homeImage.image = UIImage(named: "imagePic.png") 
     cell.homeLabel.text = "Empty data!" 

    }else{ 
    let item = knockoutsTableArray[indexPath.row] 
    if item.playing == true{ 
     cell.dateLabel.text = item.date 
     cell.homeImage.image = UIImage(named: "\(item.homeName)") 
    } 
    } 

    return cell 
} 
+0

Не можете понять, где именно ваша проблема? – Volodymyr

+0

Когда число моих данных равно нулю, я пытаюсь вернуть номер вручную для ячейки и вернуть данные, подобные приведенному выше кода. Но это не работает. Наверное, я не могу так. – winnervswinner

+0

Я не вижу код, в котором вы пытаетесь вернуть номер вручную для ячейки. Я вижу только проверку того, являются ли данные пустым массивом, чем вы заполняете его пустым содержимым данных. – Volodymyr

ответ

1

Я большой поклонник операторов switch, если еще что-то для удобочитаемости.

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    switch segmentControl.selectedIndex { 
    case 0: 
     if knockoutArray.count != 0 { 
      return knockoutArray.count 
     } else { 
      return 1 
     } 
    case 1: 
     return 4 
    case 2: 
     return 2 
    case 3: 
     return 1 
    default: 
     print("error with selectedIndex") 
     return 0 
    } 
} 

Если все строки пусты это потому, что одно из следующих действий: Ваш segmentControl.selectedIndex = -1 becuase все само по себе является невыбранной или сегментированный контроллер равен нулю. Возможно, вы не вызвали tableView.reloadData() после момента, когда этот случай был изменен.

Показать мне все cellForRowAtIndexPath, больше информации о myArray и все, что вы считаете полезным, и я увижу, что я могу сделать.

+0

Я отредактировал мой вопрос. Можно ли добавить значение в ячейку без массива? – winnervswinner

+0

Одна вещь, которую я вижу сразу, удаляет эту строку «knockoutsTableView.reloadData()». Никогда не вызывайте tableView.reloadData() изнутри cellForRowAtIndexPath. Это вызывает бесконечный цикл чаще, чем нет. – Sethmr

+0

ой жаль моя ошибка. – winnervswinner

1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    switch segmentControl.selectedIndex { 
    case 0: 
     if knockoutsTableArray.count != 0 { 
      return knockoutsTableArray.count 
     } else { 
      return 1 
     } 
    case 1: 
     if knockoutsTableArray.count != 0 { 
      return 4 
     } else { 
      return 8 
     } 
    case 2: 
     return 2 
    case 3: 
     return 1 
    default: 
     print("error with selectedIndex") 
     return 0 
    } 
} 

Это похоже на то, что вы хотите.

+0

О, ваш код работает! Но после этого 0 все данные пустые. Например; когда я устанавливаю второй сегментированный вид, и если он пуст, я хочу вернуть 8. Как я могу сделать это для управления сегментами? – winnervswinner

+0

@yesman вот так? – Sethmr

+1

Да, я писал рабочий код. Но я не использовал выражения switch :) Теперь я понимаю. Спасибо за помощь. Ты лучший! :) Я тоже редактирую свой рабочий код. – winnervswinner